簡體   English   中英

谷歌表腳本中的正則表達式

[英]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* :
    • REGEX_RANGO應該在數組上獲取值 [000,005,250,275]
    • 另一個數組上的REGEX_INDIVIDUAL應該得到 [100,200,300]
  • *001,002,003,010-015* :
    • REGEX_RANGO應該在數組上獲取值 [010,015]
    • REGEX_INDIVIDUAL應該得到 [001,002,003]

希望有人知道如何處理,謝謝。 你可以在這里這里找到我目前的嘗試。

需要明確的是:這在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM