正则字面意义上的正则表达式工作,但在使用new运算符和变量值声明时不起作用

时间:2013-10-01 20:11:40

标签: javascript regex

给定字符串input_value=

<div href="asdf"></div>
<div href="1234"></div>

替换模式

var res = input_value.replace(/.+href="(\w+)".+/gm, "$1"); 
console.log(res) //=>asdf 1234

按预期工作

但是,当我使用new运算符声明一个RegExp对象时(据我所知,只有这种方法可以为动态元素提供正则表达式),正则表达式失败并且我返回了整个input_value:

var attribute = "href";
var re = new RegExp(".+" + attribute + "=\"(\w+)\".+", "gm"); 
var res = input_value.replace(re, "$1"); 
console.log(res) //=> <div href="asdf"></div>
                 //=> <div href="1234"></div>

这两者的运作方式有何不同?

1 个答案:

答案 0 :(得分:4)

尝试转发\中的\w

var re = new RegExp(".+" + attribute + "=\"(\\w+)\".+", "gm"); 

你需要这个,因为\是字符串中的转义字符(例如\"转义文字"),因此当你需要表示文字时需要转义它{ {1}}。