2014-04-14 39 views
1

这可能是重复的,但我只是无法弄清楚这个正则表达式有什么问题。RegExp与变量和.Test()

<p id="demo">Result comes here:</p> 
<button onclick="myFunction()">Check</button> 

<script> 
function myFunction() 
{ 
    var str = "The best things in life are free"; 
    var sTerm="things"; 
    var regXSearch= "/\\b"+sTerm+"/gi"; 
    var regX = new RegExp(regXSearch); 
    //var regX= new RegExp(/\bthings/gi); 
    var result = regX.test(str); 

    document.getElementById("demo").innerHTML=result; 
} 
</script> 

由于某种原因,这返回false。如果我检查regXSearch变量的值,它将与注释掉的regX RegExp中的值完全相同。事实上这是真的。

回答

2

你正在结合两种不同的正则表达式语法。试试这个:

var regXSearch= "\\b"+sTerm; 
var regX = new RegExp(regXSearch, "gi"); 

您可以使用正则表达式文字如

/\bthings/gi 

,或者您可以使用RegExp构造函数是这样的:

new RegExp("\\bthings", "gi") 

虽然我看不出有什么充分的理由这样做,你甚至可以做

new RegExp(/\bthings/gi) 

但你是这些非法的组合:

new RegExp("/\\bthings/gi"); // DON'T DO THIS! :-) 
+0

感谢的人,就像一个魅力。 – user2596886

+0

很高兴听到它。 –