我有一个看起来像这样的正则表达式:
/([A-z0-9]+\-)+/g
与test-string-
中的模式test-string-5RtA
匹配。如何忽略该匹配项中的最后一个-
字符(但仅最后一个)。我尝试使用积极的前瞻,但这似乎无济于事。如何修改正则表达式以排除最后一个-
字符?
Here是查看正则表达式的链接。
您可以使用以下正则表达式来匹配包含指定字符但不以连字符结尾的字符串。
[A-z0-9+\-]+(?<!-)
似乎不需要捕获小组。
(?<!-)
是负向后看。例如,在[A-z0-9+\-]+
与字符串"c-at-"
中的"c-at-*"
匹配之后,正则表达式的内部字符串指针将位于第二个连字符和星号之间。断言前一个字符不能为连字符的负向后看将失败。然后,正则表达式引擎将回溯一个字符(到"t"
和"-"
之间),此时将满足后面的否定性,导致"c-at"
被匹配。