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

时间:2011-02-06 16:19:34

标签: javascript regex

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

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

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

100 two 100

一切正常;它匹配两个数字。

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

new RegExp(pattern,modifiers)

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

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

但现在它与前一个测试字符串不匹配。我已经尝试了一切,但我无法让它发挥作用。我做错了什么?

1 个答案:

答案 0 :(得分:9)

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

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

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

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

请注意,这与奇怪的事情相匹配,例如0000.3也不匹配:

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

另请注意,与使用RegExp文字相比,使用RegExp构造函数(略微)较慢且肯定不那么惯用。当您需要从提供的字符串构造您的RegExp时,使用它只是一个好主意。除了熟悉JavaScript之外,大多数人都会发现/.../符号完全清楚。

相关问题