2010-06-29 48 views
2

我有一个复杂的regEx内的字符串替换,我想使用一个名为“标记名”而不是单词类别的变量,但我不知道如何做到这一点。传递一个变量为正则表达式替换为字符串

$("textarea").val().replace(/\<Category\>(.*)\<\/Category\>/gi, "<Category>TextVariable</Category>"); 

我试过类似这样的东西,但它在第一个参数中不起作用。

$("textarea").val().replace("/\<" + tagname + "\>(.*)\<\/" + tagname "\>/gi", "<" + tagname + ">" + TextVariable + "</" + tagname + ">"); 

回答

5

您可以使用RegExp构造函数的字符串图案和标志:

var regex = new RegExp("<" + tagname + ">(.*)</" + tagname + ">", "gi"); 
$("textarea").val().replace(regex, "<" + tagname + ">" + TextVariable + "</" + tagname + ">"); 
+0

非常感谢您! :) – Guest 2010-06-29 10:40:27

6

使用RegExp构造函数代替正则表达式文字。

var regex = new RegExp("<" + tagname + ">(.*)</" + tagname + ">", "gi"); 
$("textarea").val().replace(regex, "<" + tagname + ">" + 
    textVariable + "</" + tagname + ">"); 

可以简化为:

//capture the tag name: 
var regex = new RegExp("<(" + tagname + ")>(.*)</" + tagname + ">", "gi"); 
$("textarea").val().replace(regex, "<$1>" + textVariable + "</$1>"); 

但是请记住,parsing xml/html with regex is a baaad idea