将“使用String.replace()替换为正则表达式”

时间:2012-08-09 16:19:50

标签: javascript regex

我有以下字符串

"content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content"

我想使用"函数将标记定义中的所有'个字符替换为String.replace()字符。标记内容中的"字符必须保持其当前形式。

"content \" content <tag attr1='val1' attr2='val2'>content \" content</tag> content \" content"

可能正在使用某些分组的正则表达式吗?

4 个答案:

答案 0 :(得分:1)

您可以使用replace()和正则表达式回调为您执行此操作:

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';

function replaceCallback(match) {
    return match.replace(/"/g, "'");
}

str = str.replace(/<([^>]*)>/g, replaceCallback);

正则表达式将匹配字符串中<>个字符之间的任何内容,并将匹配项传递给replaceCallback()方法,然后根据需要替换" } '个字符。

修改 replaceCallback()正在使用.replace('"', "'"),但这只会取代第一个"。我已将其更新为使用正则表达式替换,现在它可以按需使用。

答案 1 :(得分:1)

以下代码(取自this question的已接受答案)也可以在没有回调的情况下使用,但使用不易理解的正则表达式。

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';
str = str.replace(/"(?=[^<]*>)/g, "'");

答案 2 :(得分:1)

var str = "content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content";

var replaced = str.replace(/\<.*?\>/g, function(match, index){ 
  return match.replace(/"/g, "'"); // `match` will be each tag , both opening and closing. 
});

答案 3 :(得分:1)

只有一个正则表达式无法实现,必须使用组合。这是要走的路:

  1. 匹配标签内的文字,这很容易。
  2. 将上一场比赛的输出中的字符替换为您想要使用的字符 现在你已完成上一场比赛,这也很容易。
  3. 向你致敬!无论你是什么。