[英]Regex in Google sheet script
我有 2 個在 regex101 上完美運行的正則表達式,但是,在工作表腳本中,一個( REGEX_RANGO )在調用 .test 時返回 false,而另一個( REGEX_INVIDIDUAL )根本不起作用。
(注:我用sheet上的一個單元格來調試這種情況,不知道有沒有更好的,有知道的請貼一下!)
我目前的正則表達式是:
var REGEX_RANGO = /((?=(\d|\,))(\d{1,3}-\d{1,3})+(?=(\s|\,)))/gm;
var REGEX_INDIVIDUAL = /((?<=,)|(?:^(\d)))[^(,|\-)\n]+((?=,)|(?:\s))/gm;
為什么我需要兩者? 好吧,我有一個表單,人們可以在其中加入值,並且正則表達式可以處理它們。
輸入是這樣的:
*000-005,100,200,250-275,300*
:
*001,002,003,010-015*
:
希望有人知道如何處理,謝謝。 你可以在這里和這里找到我目前的嘗試。
需要明確的是:這在 regex101 上工作正常,而不是在 Google Sheet 上,也許是一個范圍,或者我需要轉義正則表達式?
編輯:
var REGEX_INDIVIDUAL = /((?<=,)|(?:^(\d)))[^(,|\-)]+(?=($|,))/gm;
var j = numeros_ingresados.match( REGEX_INDIVIDUAL )
SpreadsheetApp.getActiveSheet( ).getRange("F1").setValue( " >> j : " + j )
請注意,GAS JS RegExp
在您的模式中不支持像(?<=,)
后視。
您可以使用以下示例代碼來提取您需要的值:
function extractRangos() {
var s = "000-005,100,200,250-275,300";
var REGEX_RANGO = /(?:^|,)(\d+)-(\d+)(?![^,])/g;
var REGEX_INDIVIDUAL = /(?:^|,)(\d+)(?![^,])/g;
var m, res_rango = [], res_ind = [];
while (m = REGEX_RANGO.exec(s)) {
res_rango.push(m[1]);
res_rango.push(m[2]);
}
while (m = REGEX_INDIVIDUAL.exec(s)) {
res_ind.push(m[1]);
}
Logger.log(res_rango);
Logger.log(res_ind);
}
結果日志:
正則表達式詳情
單獨的正則表達式模式是
(?:^|,)(\d+)(?![^,])
它匹配
(?:^|,)
- 字符串或逗號的開頭(\\d+)
- 捕獲組 1:一位或多位數字(?![^,])
- 如果下一個字符不是逗號(數字后面的下一個字符應該是逗號或字符串結尾),則匹配失敗的負前瞻。重點是僅收集第 1 組值。
該rango正則表達式模式是
(?:^|,)(\d+)-(\d+)(?![^,])
它匹配:
(?:^|,)
- 匹配字符串開頭或逗號的非捕獲組(\\d+)
- 第 1 組:一位或多位數字-
- 一個連字符(\\d+)
- 第 2 組:一位或多位數字(?![^,])
- 如果下一個字符不是逗號,則匹配失敗的負前瞻。重點是僅收集第 1 組和第 2 組值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.