所以,我正在尝试编写一个匹配所有数字的正则表达式.这是正则表达式:
/\b[\d \.]+\b/g
Run Code Online (Sandbox Code Playgroud)
我尝试在字符串上使用它:
100 two 100
Run Code Online (Sandbox Code Playgroud)
一切正常; 它匹配两个数字.
但是我想在表单中重写正则表达式:
new RegExp(pattern,modifiers)
Run Code Online (Sandbox Code Playgroud)
因为我觉得它看起来更清晰.所以我这样写:
new RegExp('\b[\d \.]+\b','g')
Run Code Online (Sandbox Code Playgroud)
但现在它与前一个测试字符串不匹配.我已经尝试了一切,但我无法让它发挥作用.我究竟做错了什么?
请忽略我的投票结果.你的问题是字符串中的反斜杠具有特殊含义; 如果你想在正则表达式中使用反斜杠,首先需要在传递给正则表达式的字符串中获得字面反斜杠:
new RegExp('\\b[\\d \\.]+\\b','g');
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个非常糟糕的(允许的)正则表达式,因为它将匹配". . . "为"数字",或"1 1...3 42".更好的可能是:
/-?\d+(?:\.\d+)?\b/
Run Code Online (Sandbox Code Playgroud)
请注意,这匹配奇怪的东西,如0000.3也不匹配:
+1.3e7.4另请注意,使用RegExp构造函数(稍微)慢一点,当然比使用RegExp文字更少惯用.当您需要从提供的字符串构造您的RegExp时,使用它只是一个好主意.大多数人只要熟悉JavaScript,就会发现/.../符号完全清晰.