我有一个这样的变量text

“爱德华·洛伦(Lorem ipsum)多洛尔(Dolor)坐镇; conittetur教官; sed diam nonumy eirmod tempor” ut Labore”和“ sed diam voluptua”。

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

var symbolsToreplace = [';', '/', '.']


逗号。另外,我想做的是不要替换引号内的任何内容,因此所有符号都保持不变。
这是正则表达式来检测报价:

var detectQuotes = /"([^"]*)"/g;


到目前为止,我已经完成了一部分任务(在这里,我将数组中的所有符号替换为','):

  symbolsToreplace.map(function (s) {
    if(text.indexOf(s) !== -1 ) {
      text.replace(s, ',');
    }
  })


我如何应用正则表达式detectQuotes,所以引号内的符号将被忽略?

最佳答案

您可以将文本用双引号引起来,然后仅对奇数片段应用替换,然后合并结果:



var text = "Lorem ipsum dolor sit amet; consetetur sadipscing elitr; sed diam nonumy eirmod tempor \"invidunt; ut labore\" et dolore magna aliquyam erat/ sed diam voluptua.";
var delimiters = ';./',
  template = new RegExp('[' + delimiters + ']','g')

var replaced = text
  .split('"')
  .reduce(function(previous, current, index) {
    current = (index % 2 === 0) ? current.replace(template, ',') : current;
    return previous + '"' + current;
  }, '');

console.log(replaced);

08-04 05:32
查看更多