繁体   English   中英

用String.replace()替换正则表达式

[英]replace " using String.replace() with 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"

也许正则表达式可以与某些分组一起使用?

您可以使用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('"', "'") ,但这只会替换第一个" 我已经对其进行了更新以使用正则表达式替换,并且现在可以按需运行了。

以下代码(从该问题的公认答案中获取)也可以使用,无需回调,但使用不易理解的正则表达式。

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';
str = str.replace(/"(?=[^<]*>)/g, "'");
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. 
});

您不能只使用一个正则表达式,而必须使用一种组合。 这是要走的路:

  1. 匹配标签中的文本,这很容易。
  2. 将您以前的比赛输出中的字符替换为您要使用replace的字符,这很容易,因为您已经完成了先前的比赛。

向你致敬! 不管你是谁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM