2011-02-06 64 views
2

所以,我试图编写一个匹配所有数字的正则表达式。下面是正则表达式:通过新的RegExp(myString)创建正则表达式不工作(反斜杠)

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

我尝试使用它的字符串:

100 two 100 

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

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

new RegExp(pattern,modifiers) 

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

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

但现在它不会匹配前测试字符串。我已经尝试过所有的东西,但我无法完成它的工作。我究竟做错了什么?

回答

7

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

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

注意,这是一个非常糟糕的(许可)正则表达式,因为它会匹配". . . "作为'号码',或"1 1...3 42"。更好的可能是:

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

注意,这奇怪的事情相匹配像0000.3也不符:

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

另请注意,使用RegExp构造函数比(使用RegExp文字)慢(稍微)慢一点,并且肯定不如使用RegExp文字。使用它只是一个好主意,当你需要从提供的字符串构造你的RegExp。绝大多数熟悉JavaScript的人都会发现/.../符号完全清楚。

相关问题