我有以下字符串
"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"
可能正在使用某些分组的正则表达式吗?
答案 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)
只有一个正则表达式无法实现,必须使用组合。这是要走的路:
向你致敬!无论你是什么。