2011-08-01 154 views
0

只是好奇。有什么区别?格式化动态正则表达式

var a=text.replace(/(Nullam|ligula|in)/ig,'`<b>$1</b>`'); 

var string = "Nullam|lingula|in"; 
var pattern = new RegExp (string, "ig");  
var a=text.replace(pattern ,'`<b>$1</b>`'); 

这应该给出了相同的结果,但事实并非如此。有什么想法吗?

谢谢

+0

如果你在第二个例子中写道'$ 0',而不是'$ 1',那么你会得到相同的导致两者。实际上,如果你在第一个例子中使用了'$ 0',你也会得到。 –

回答

3

你在后面的声明中缺少parens,所以没有捕获。而该标志为gi,不ig(虽然我不知道这有什么差别)

var reString = "(Nullam|lingula|in)"; var pattern = new RegExp (reString, "gi"); 
+0

例如,当第一个技巧找到一个单词时,它会使它变成粗体,并且不会'替换单词。与此同时,当第二个人找到一个单词时,它会使其变得粗体,并且从字面上将它替换为“$ 1”。这是我的实验所产生的结果。我试图达到的目的就是让这个词变成粗体而不用直接替换这个词。这可能吗? (带动态关键字) – Nebby

+0

是的,那是因为你错过了创建捕获组的parens。 – Mrchief

+0

按照你的建议。我试过了,无法让它工作。这里是我的实验: 第一种技术http://jsfiddle.net/oceog/q8S7E/ AND 第二种技术:http://jsfiddle.net/UyWTf/1/ – Nebby