Javascript 如何用正则表达式替换除引用文本外的整个文本中的某些符号

Javascript 如何用正则表达式替换除引用文本外的整个文本中的某些符号,javascript,regex,Javascript,Regex,我有一个变量text,如下所示: “Lorem ipsum door sit amet;consetetur sadipscing eliter;sed diam nonumy eirmod tempor”因维敦;劳工部“et dolore magna aliquyam erat/sed diam voluptua。” 我要做的是替换数组中的所有符号: var symbolsToreplace = [';', '/', '.'] 一个逗号。另外,我想做的是不替换引号中的任何内容,因此所有符号保

我有一个变量
text
,如下所示:

“Lorem ipsum door sit amet;consetetur sadipscing eliter;sed diam nonumy eirmod tempor”因维敦;劳工部“et dolore magna aliquyam erat/sed diam voluptua。”

我要做的是替换数组中的所有符号:

var symbolsToreplace = [';', '/', '.']
一个逗号。另外,我想做的是不替换引号中的任何内容,因此所有符号保持不变。 下面是用于检测引号的正则表达式:

var detectQuotes = /"([^"]*)"/g;
现在我已经完成了任务的一部分(这里我将数组中的所有符号替换为“,”):


如何应用Regex
detectQuotes
,以便忽略引号内的符号?

您可以将文本拆分为双引号,然后仅对奇数片段应用替换,然后连接结果:

var text=“Lorem ipsum door sit amet;consetetur sadipscing elitr;sed diam nonumy eirmod tempor\”不受影响;我们的劳动是“一个巨大的经济体/一个巨大的经济体”;
变量分隔符=';./',
template=new RegExp('['+分隔符+']','g')
var=text
.split(“”)
.reduce(功能(上一个、当前、索引){
当前=(索引%2===0)?当前。替换(模板,,):当前;
返回上一个+'“'+当前值;
}, '');

控制台日志(已替换)
您可以使用带有正则表达式的
replace
方法,该正则表达式将捕获双引号之间的子字符串,并且只匹配要替换的字符,然后检查匿名方法内部是否组1匹配,如果是,则恢复匹配,否则,用逗号替换:

var s='Lorem ipsum door sit amet;消费精英;“不可抗力”是指临时“不可抗力”和“不可抗力/不可抗力”;
console.log(
s、 替换(/“([^”]+)“|[;.\/]/g,函数($0,$1){返回$1?$0:',';})
//ES6:
//s、 替换(/“([^”]+)“|[;.\/]/g,($0,$1)=>1?$0:',')
);
.replace(/”([^“]*)“|[;.\/]/g,函数($0,$1){返回$1?$0:',';})
  symbolsToreplace.map(function (s) {
    if(text.indexOf(s) !== -1 ) {
      text.replace(s, ',');
    }
  })