2012-11-20 264 views
0

有人可以解释为什么这不起作用吗? (我使用Chrome开发者控制台)Javascript正则表达式匹配失败

pattern 
-> "/Xmp\.MP\.RegionInfo\/MPRI:Regions/" 
key 
-> "Xmp.MP.RegionInfo/MPRI:Regions[1]" 
key.search(pattern) 
-> -1 
key.search(/Xmp\.MP\.RegionInfo\/MPRI:Regions/) 
-> -1 
"Xmp.MP.RegionInfo/MPRI:Regions[1]".search(pat) 
-> -1 
"Xmp.MP.RegionInfo/MPRI:Regions[1]".search(/Xmp\.MP\.RegionInfo\/MPRI:Regions/) 
-> 0 

它使绝对没有任何意义,我认为如果我使用的变量搜索不符....

+0

我无法重现此行为:'key.search(/Xmp\.MP\.RegionInfo\/MPRI:Regions/)'outputs'-1'。正如预期的那样,我得到'0'。 –

回答

2

看起来pattern是一个字符串你第一个例子,它需要一个RegExp对象:

var pattern = /Xmp\.MP\.RegionInfo\/MPRI:Regions/ 
var key = "Xmp.MP.RegionInfo/MPRI:Regions[1]" 

key.search(pattern); // equals 0 

如果你想将字符串转换为一个正则表达式,使用RegExp构造(但去掉斜线):

var pattern = new RegExp("Xmp\.MP\.RegionInfo\/MPRI:Regions"); 

http://jsfiddle.net/CpEjA/

+0

不,不是,但它是在问题中。无法解释它。 –

0

在你的榜样模式似乎是一个字符串。你需要它是一个RegExp对象。

0

在第一种情况下,你的模式用引号括起来,所以它是字符串。在第二种情况下,它不带引号 - >它是RegExp对象。