对于以?结尾的字符串,查找替换为RegEx失败谷歌脚本
我在 Google 表格中有一个脚本
我正在尝试从不同工作表上的值表中查找和替换工作表上的标题
它主要按需要工作,但replace不适用于任何以?
我不知道什么时候?会出现
我正在使用这个:
const regex = new RegExp("(?<![^|])(?:" + search_for.join("|") + ")(?![^|])", "g");
我试图弄清楚如何更正我的正则表达式但没有得到它
在此先感谢您的帮助
我在一张纸上:
| 搜索 | 用。。。来代替 |
|---|---|
| ABC乔 | MNQ |
| XYZ车 | XXX |
| DDD foo? | 鲍勃酒吧 |
回答
一句警告:你的所作所为有点吓到我了。我希望你知道这是一种脆弱的方法,它可能会出错。
您没有引用正则表达式的动态部分。该?是正则表达式中一个特殊字符。我在下面写了一个解决你的问题的方法。不要在生产中依赖我的解决方案。
//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');
}