我有一个正则表达式,看起来像这样:
/([A-z0-9]+\-)+/g
它将从“test-string-5RtA”中匹配模式“test-string-”。我该如何忽略该匹配中的最后一个“-”字符(仅限最后一个)?我尝试使用正向先行断言,但似乎没有起作用。我该如何修改我的正则表达式以排除最后一个“-”字符? 这里是查看正则表达式实际效果的链接。
[A-z0-9+\-]+(?<!-)
似乎不需要捕获组。
(?<!-)
是一个负向后顾。在字符串"c-at-*"
中,当[A-z0-9+\-]+
匹配到"c-at-"
时,正则表达式的内部字符串指针将位于第二个连字符和星号之间。负向后顾断言前一个字符不能是连字符,因此会失败。然后正则引擎会回溯一个字符(到"t"
和"-"
之间),此时负向后顾将满足条件,从而匹配到"c-at"
。
"["
,"\\"
,"]"
,"^"
,"_"
和"\
"。这似乎有些奇怪 :-) - Cary SwovelandA-Z
。 - Alex Lowe