使用字符串替换将变量传递给正则表达式

Gue*_*est 2 javascript regex jquery replace

我在字符串替换中有一个复杂的regEx,我想使用一个名为"tagname"的变量而不是单词Category,但我不知道如何做到这一点.

$("textarea").val().replace(/\<Category\>(.*)\<\/Category\>/gi, "<Category>TextVariable</Category>");
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的东西,但它在第一个参数中没有用.

$("textarea").val().replace("/\<" + tagname + "\>(.*)\<\/" + tagname "\>/gi", "<" + tagname + ">" + TextVariable + "</" + tagname + ">");
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 6

您可以使用RegExp带有字符串模式和标志的构造函数:

var regex = new RegExp("<" + tagname + ">(.*)</" + tagname + ">", "gi");
$("textarea").val().replace(regex, "<" + tagname + ">" + TextVariable + "</" + tagname + ">");
Run Code Online (Sandbox Code Playgroud)


Ama*_*osh 6

使用RegExp构造函数而不是正则表达式文字.

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

你可以简化为:

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

但请记住,使用正则表达式解析xml/html是一个很好的想法