小编典典

通过新的RegExp(myString)创建的正则表达式不起作用(反斜杠)

javascript

因此,我正在尝试编写一个匹配所有数字的正则表达式。这是正则表达式:

/\b[\d \.]+\b/g

我尝试在字符串上使用它:

100 two 100

而且一切正常。它与两个数字都匹配。

但是我想以以下形式重写正则表达式:

new RegExp(pattern,modifiers)

因为我认为它看起来更清晰。所以我这样写:

new RegExp('\b[\d \.]+\b','g')

但是现在它与以前的测试字符串不匹配。我已经尝试了所有方法,但是无法正常工作。我究竟做错了什么?


阅读 488

收藏
2020-05-01

共1个答案

小编典典

请忽略我的近距离投票。您的问题是字符串中的反斜杠具有特殊含义;如果要在正则表达式中使用反斜杠,则首先需要在传递给正则表达式的字符串中获取文字反斜杠:

new RegExp('\\b[\\d \\.]+\\b','g');

请注意,这是一个非常糟糕的(允许)正则表达式,因为它将匹配". . . "为“数字”或"1 1...3 42"。更好的可能是:

/-?\d+(?:\.\d+)?\b/

请注意,这匹配0000.3不匹配的奇怪事物:

  • 领导 +
  • 科学记数法,例如 1.3e7
  • 缺少前导数字,例如 .4

还要注意,使用RegExp构造函数比使用RegExp文字慢(略),并且习惯用法肯定更少。仅当需要根据提供的字符串构造RegExp时,使用它才是一个好主意。大多数不仅仅通过JavaScript的人都会发现该/.../符号完全清楚。

2020-05-01