如果字符串包含单引号"
,我需要用双引号""
替换它。但是,有时候一个有效的双引号可以跟一个单引号,例如。 """
,只需要在末尾添加另一个引用。如果我使用标准替换,例如。 replace('"', '""')
,所有引号都变成了双打,当然,不仅仅是奇数。
我需要的是找到任何奇数个连续引号(包括一个单独的引号)并简单地在末尾添加另一个引号。例如。 "
变为""
,"""
变为""""
。
JavaScript中是否有正则表达式替换可以实现此目的?
答案 0 :(得分:6)
报价是否连续?除非我误解了你的要求,否则这会有效......
str = str.replace(/\"\"?/g, '""')
说明:匹配单个引号,可选地后跟另一个引号,并用两个引号替换一个/两个。
示例: http://jsfiddle.net/aR6p2/
或者,如果只是在字符串中有奇数引号时附加引号的问题......
var count = str.split('"').length - 1
str = str + (count % 2 == 0 ? '' : '"')
答案 1 :(得分:1)
你可以这样做:
var str = '"" """" """ """""';
var re = /([^"]|^)"("")*(?!")/g;
console.log(str.replace(re, '$1(quotes)')); // '"" """" (quotes) (quotes)'
这是做什么的:
(quotes)
。基本上,它只是用(quotes)
替换任何奇数的双引号。
答案 2 :(得分:0)
可能有一个疯狂的正则表达式可以做到这一点,但为了防止自己发疯,我会这样做。
str = str.replace(/[^"]("+)/, function(match, group1){
if((group1.length % 2) === 1 || group1.length === 1){
return group1+'"';
}
return group1;
});