一个小组的正则表达式外观并不起作用

时间:2016-03-19 10:24:16

标签: javascript regex string regex-lookarounds

周六快乐,

我想知道Stackoverflow的用户是否能给我一个特定正则表达式的线索..

(^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/来测试我的正则表达式。

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

1 个答案:

答案 0 :(得分:1)

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

"问题"是引擎可以在\d+模式内回溯,如果第三个没有跟随非数字,它可以匹配2位数。

解决问题的最佳方法是检查实际要求并调整模式。

如果数字是字符串中的最后一个字符,您应该用$锚替换前瞻。

对此的通用解决方案是使子模式具有捕获组的原子,在正向前导和反向引用内,并确保前瞻更改为(?![a-zA-Z]) - 如果有字母则失败):< / p>

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

请参阅regex demo

或者,如果单词边界应该跟在数字后面(即数字后跟字母,数字或下划线),请使用\b代替前瞻:

/^visite\d+\b/

请参阅another demo