一个组的正则表达式环顾四周不起作用

Regex lookaround for a group doesn't work

周六快乐,

我想知道 Whosebug 的用户是否可以给我关于一个特定正则表达式的线索..

(^visite\d+)(?!\D)

上面的正则表达式运行良好..

它说:

visite12345  --> is a good anwser (the string does match)
visite1a     --> is not a good anwser (the string doesn't match)

但是对于:

visite12345a --> It doesn't work.

确实,输出是 visite1234,而我想得到与 visite1a 相同的答案(字符串不匹配)...

我使用 http://regexr.com/ 来测试我的正则表达式。

你知道怎么做吗? 非常感谢。

正则表达式 (^visite\d+)(?!\D) 匹配字符串开头的 visite,后跟一个或多个不应跟非数字的数字。

"issue"是引擎可以在\d+模式中回溯,如果第三个数字后面没有跟一个非数字,它可以匹配2个数字。

最好的解决方法是检查实际需求,调整模式。

如果数字是字符串中的最后一个字符,您只需将前瞻替换为 $ 锚点。

一个通用的解决方案是使子模式在正前瞻和反向引用中具有捕获组,并确保前瞻更改为类似 (?![a-zA-Z]) 的内容 - 如果有字母则失败) :

/^visite(?=(\d+))(?![a-z])/i

regex demo

或者如果单词边界应该跟在数字之后(即数字应该跟在字母、数字或下划线之后),请使用 \b 而不是向前看:

/^visite\d+\b/

another demo