对于以 ? 结尾的字符串,查找替换为 RegEx 失败 谷歌脚本

xyz*_*333 2 regex google-sheets google-apps-script

我在 Google 表格中有一个脚本

我正在尝试从不同工作表上的值表中查找和替换工作表上的标题

它主要按需要工作,但replace不适用于任何以?

我不知道什么时候?会出现

我正在使用这个:

const regex = new RegExp("(?<![^|])(?:" + search_for.join("|") + ")(?![^|])", "g");

我试图弄清楚如何更正我的正则表达式但没有得到它

在此先感谢您的帮助

我在一张纸上:

搜索 用。。。来代替
ABC乔 MNQ
XYZ车 XXX
DDD foo? 鲍勃酒吧

我在另一张纸上有标题:

标签 ID ABC乔 XYZ车 DDD foo?

运行替换后,我想要标题:

标签 ID MNQ XXX 鲍勃酒吧

我得到的是:

标签 ID MNQ XXX DDD foo?
var data = range.getValues();


 search_for.forEach(function(item, i) {
    pair[item] = replace_with[i];
  });

  const regex = new RegExp("(?<![^|])(?:" + search_for.join("|") + ")(?![^|])", "g");

  //Update Header row
  //replace(/^\s+|\s+$|\s+(?=\s)/g, "") - Remove all multiple white-spaces and replaces with a single WS & trim
    for(var m = 0; m<= data[0].length - 1; m++){
            data[0][m] = data[0][m].replace(/^\s+|\s+$|\s+(?=\s)/g, "").replace(regex,(m) => pair[m])
    }
Run Code Online (Sandbox Code Playgroud)

Kri*_*nck 5

一句警告:你的所作所为有点吓到我了。我希望你知道这是一种脆弱的方法,它可能会出错。

您没有引用正则表达式的动态部分。该?是正则表达式中一个特殊字符。我在下面写了一个解决你的问题的方法。不要在生产中依赖我的解决方案。

//var data = range.getValues();

var data = [
    ['Label', 'Id', 'ABC Joe', 'XYZ car', 'DDD foo?']
];
var search_for = [
    'ABC Joe',
    'XYZ car',
    'DDD foo?'
];
var replace_with = [
    'MNQ',
    'NNN XXX',
    'Bob bar'
];
var pair = {};


search_for.forEach(function(item, i) {
    pair[item] = replace_with[i];
});

const regex = new RegExp("(?<![^|])(?:" + search_for.map((it) => quote(it)).join("|") + ")(?![^|])", "g");
for (var m = 0; m <= data[0].length - 1; m++) {
    data[0][m] = data[0][m]
        .replace(/^\s+|\s+$|\s+(?=\s)/g, "")
        .replace(regex, (m) => pair[m]);
}

// see https://stackoverflow.com/a/3614500/11451
function quote(s) {
    var regexpSpecialChars = /([\[\]\^\$\|\(\)\\\+\*\?\{\}\=\!])/gi;
    return s.replace(regexpSpecialChars, '\\$1');
}
Run Code Online (Sandbox Code Playgroud)