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();
添加回答
舉報