2 回答
TA贡献1966条经验 获得超4个赞
你的固定功能可以是这样的
function findReplace_mod1() {
const ss = SpreadsheetApp.getActiveSheet();
const col = ss.getRange(2, 3, ss.getLastRow()).getValues();
var ifind = ["AA", "CaaL"];
var ireplace = ["zz", "Bob"];
var map = {};
ifind.forEach(function(item, i) {
map[item] = ireplace[i];
});
//const map = { Fellow: 'AAA', bob: 'BBB' };
const regex = new RegExp("(?<![^|])(?:" + ifind.join("|") + ")(?![^|])", "g");
ss.getRange(2, 3, ss.getLastRow()).setValues(col.map(fr));
function fr(input) {
return input.map(c => c.replace(regex, (x) => map[x]));
}
}
图案看起来像
/(?<![^|])(?:AA|CaaL)(?![^|])/g
在哪里
(?<![^|])
|
- 是一个负向后查找,如果紧邻当前位置左侧的字符串有 或 开头,则匹配失败(?:AA|CaaL)
- 一个AA
或CaaL
(?![^|])
|
- 是负向前瞻,如果当前位置右侧紧邻字符串的 或 结尾,则匹配失败。
请参阅在线正则表达式演示(因为该演示是针对单个多行字符串而不是一组单独的字符串运行,所以负向查找被替换为正向查找)。
TA贡献1804条经验 获得超7个赞
要替换的字符串
以
|
或 字符串开头^
以
|
或 字符串结尾$
正则表达式需要是
str.replace(new Regexp(`(\\||^)${k}(\\||$)`), `$1${map[k]}$2`)
/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/
function findReplace_mod2() {
const col = [['AAA AA|AA|CaaL AA'], ['AA'], ['AAA-AA|AA|CaaL']];
const map = { AA: 'zz', CaaL: 'Bob' };
const iFinds = Object.keys(map);
console.info(col.map(fr));
function fr(input) {
return [iFinds.reduce((str, k) => str.replace(new RegExp(`(\\||^)${k}(\\||$)`), `$1${map[k]}$2`), input[0])];
}
}
findReplace_mod2();
添加回答
举报