【问题标题】:Regex lookaround for a group doesn't work组的正则表达式环视不起作用
【发布时间】:2016-03-19 10:24:15
【问题描述】:

周六快乐,

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

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

【问题讨论】:

  • 它也会在您的第一个输入中捕获visite1234。你想做什么?

标签: javascript regex string regex-lookarounds


【解决方案1】:

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

“问题”是引擎可以在\d+ 模式内回溯,如果第三个后面没有非数字,它可以匹配两个数字。

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

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

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

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

regex demo

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

/^visite\d+\b/

another demo

【讨论】:

  • 完美解决了这个问题。而且很简单...我应该自己考虑一下...谢谢!
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多