0

abc只要不跟随,我想匹配任何x

我倾向于使用正则表达式/[^x]abc/,但是如果我写dabc它匹配dabc,而我希望它只匹配abc部分。

我怎样才能使用类似的东西[^x]来限定正则表达式的开头而不计入我的匹配?

4

3 回答 3

1

使用否定的 Lookbehind

您可以使用否定的lookbehind,然后通过特殊变量访问最后一个匹配项$&。例如:

domatch = 'foo abc'
nomatch = 'xabc'
pattern = /(?<!x)abc/

domatch.match pattern
$&
#=> "abc"

nomatch.match pattern
$&
#=> nil

有关详细信息,请参阅Regexp 类

于 2013-10-03T19:28:36.147 回答
0

使用方括号,然后作为第二个参数指定子组,在这种情况下 w 只有一个,所以 1 将获得子组。

my_string = 'dabc'
my_string[/[^x](abc)/, 1] # => 'abc'
于 2013-10-03T19:27:36.523 回答
0

添加 () 将创建一个您可以引用的匹配组:

a = 'dabc'
p a.match(/[^x](abc)/)[1]

=> "abc"
于 2013-10-03T19:23:06.800 回答