重构 2 个正则表达式
Refactoring 2 Regexps
我要拆分字符串
smartcode = '{{question.answer}}'
终于得到刚刚
'answer'
我知道这行得通
smartcode.split(/\{{(.*?)\}}/).last.split(/\.(?=[\w])/).last
但我想这不是更好的方法...
我建议:
smartcode = '{{question.answer}}'
smartcode.match(/\.(\w+)/)[1]
#=> "answer"
或者当你想确保具体结构时用括号括起来,两个单词之间用点隔开:
smartcode.match(/{{\w+\.(\w+)}}/)[1]
#=> "answer"
如果你想让你的答案变得复杂,你不应该选择 \w+
而应该选择 /.*\.(.*?)\}/
(基本上这会匹配 .
和 }
例如:
> smartcode = '{{question.complex answer w/ more than 1 kind of symbols such as $}}'
> smartcode.match(/\.(\w+)/)[1]
=> "complex"
> smartcode.match(/.*\.(.*?)\}/)[1]
=> "complex answer w/ more than 1 kind of symbols such as $"
你可以使用
smartcode[/{{[^{}]*\.([^{}]*)}}/, 1]
/{{[^{}]*\.([^{}]*)}}/
正则表达式(参见 regex demo)匹配
{{
- {{
文本
[^{}]*
- {
和 }
以外的任何零个或多个字符尽可能多
\.
- 一个点
([^{}]*)
- 第 1 组(此子字符串将与 [/regex/, num]
构造一起返回):除 {
和 }
之外的任何零个或多个字符,尽可能多尽可能
}}
- }}
文本。
参见 Ruby code online:
smartcode = '{{question.answer}}'
puts smartcode[/{{[^{}]*\.([^{}]*)}}/, 1]
# => answer
如果需要获取多个匹配项,请使用.scan
:
smartcode = '{{question.answer}} and {{question.author}}'
puts smartcode.scan(/{{[^{}]*\.([^{}]*)}}/)
# => ['answer', 'author']
我要拆分字符串
smartcode = '{{question.answer}}'
终于得到刚刚
'answer'
我知道这行得通
smartcode.split(/\{{(.*?)\}}/).last.split(/\.(?=[\w])/).last
但我想这不是更好的方法...
我建议:
smartcode = '{{question.answer}}'
smartcode.match(/\.(\w+)/)[1]
#=> "answer"
或者当你想确保具体结构时用括号括起来,两个单词之间用点隔开:
smartcode.match(/{{\w+\.(\w+)}}/)[1]
#=> "answer"
如果你想让你的答案变得复杂,你不应该选择 \w+
而应该选择 /.*\.(.*?)\}/
(基本上这会匹配 .
和 }
例如:
> smartcode = '{{question.complex answer w/ more than 1 kind of symbols such as $}}'
> smartcode.match(/\.(\w+)/)[1]
=> "complex"
> smartcode.match(/.*\.(.*?)\}/)[1]
=> "complex answer w/ more than 1 kind of symbols such as $"
你可以使用
smartcode[/{{[^{}]*\.([^{}]*)}}/, 1]
/{{[^{}]*\.([^{}]*)}}/
正则表达式(参见 regex demo)匹配
{{
-{{
文本[^{}]*
-{
和}
以外的任何零个或多个字符尽可能多\.
- 一个点([^{}]*)
- 第 1 组(此子字符串将与[/regex/, num]
构造一起返回):除{
和}
之外的任何零个或多个字符,尽可能多尽可能}}
-}}
文本。
参见 Ruby code online:
smartcode = '{{question.answer}}'
puts smartcode[/{{[^{}]*\.([^{}]*)}}/, 1]
# => answer
如果需要获取多个匹配项,请使用.scan
:
smartcode = '{{question.answer}} and {{question.author}}'
puts smartcode.scan(/{{[^{}]*\.([^{}]*)}}/)
# => ['answer', 'author']