Передайте переменную в регулярное выражение с заменой строки - PullRequest
2 голосов
/ 29 июня 2010

У меня сложный regEx внутри строки replace, и я хочу использовать переменную с именем "tagname" вместо слова Category, но я не знаю, как это сделать.

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

Я пробовал что-то подобное, но в первом параметре это не сработало.

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

Ответы [ 2 ]

6 голосов
/ 29 июня 2010

Используйте конструктор 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>");

Но имейте в виду, что анализ xml / html с помощью регулярных выражений является идеей baaad

6 голосов
/ 29 июня 2010

Вы можете использовать конструктор RegExp со строковым шаблоном и флагами:

var regex = new RegExp("<" + tagname + ">(.*)</" + tagname + ">", "gi");
$("textarea").val().replace(regex, "<" + tagname + ">" + TextVariable + "</" + tagname + ">");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...