我想重現嵌套Regex_MATCH函數在Google表格上,但使用匹配表(以便我可以更容易地適應/編輯)。它應該與數組一起工作,因爲我將它與arrayformula一起使用。谷歌表格腳本連續/嵌套正則表達式
例如:我想更換一個像這樣的公式:
=arrayformula(if(len(A2:A)>1,If(REGEXMATCH(A2:A, "[bB]lue[bB]alloon|Blue_Balloon"),"BlueBalloon_2017",
IF(REGEXMATCH(A2:A, "[hH]ydraphase"),"Hydraphase_2017",
IF(REGEXMATCH(A2:A, "[sS]kinchecker"),"Skinchecker_2017"))),""))
通過簡單:
=arrayformula(if(len(A2:A)>1,regexTable(A2:A),"")
凡regexTable是一個自定義功能
// function loop RE_table named range and get matching value in result_table
function regexTable()
{
var s = SpreadsheetApp.getActiveSpreadsheet();
var refs = s.getSheetByName('refs') //get range in refs worksheet
var RE_table = refs.getRange("D2:D4").getvalues; // list of regular expressions to test
var result_table = refs.getRange("E2:E4").getvalues; // results to return if REGEX_MATCH = TRUE
var numRows = RE_table.getNumRows(); // loop through all regular expressions to test
for (var i = 1; i <= numRows; i++) { // I would like to exist loop as soon as REGEX_MATCH = TRUE
if(RE_table[i][1].test())
return result_table[i][1]
}
}
這是我第一次搞亂谷歌腳本編輯器,所以我的問題是:
- 什麼不起作用?
- 這怎麼可能運行儘可能快?
非常感謝, 來自瑞士的歡呼聲。
爲什麼不使用像'= ARRAYFORMULA(PROPER(REGEXREPLACE(A1:A, 「([AZ] | [AZ])(\ w +)」, 「$ 1 $ 2_2017」)))' –
,因爲正則表達式和期望的結果字符串的輸入可能會與此公式返回的值不同 – user7736602