gpt4 book ai didi

javascript - Google 工作表脚本中的正则表达式

转载 作者:行者123 更新时间:2023-11-29 23:17:24 25 4
gpt4 key购买 nike

我有 2 个正则表达式可以在 regex101 上完美运行,但是,在工作表脚本中,一个 (REGEX_RANGO) 在调用 .test 时返回 false,另一个 (REGEX_INVIDIDUAL) 根本不起作用。

(注:我是用sheet上的cell来调试这种情况的,不知道有没有更好的,有知道的麻烦发一下!)

我当前的正则表达式是:

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]

希望有人知道如何处理这个,谢谢。你可以找到我目前的尝试 herehere .

需要说明的是:这在 regex101 上运行正常,但在 Google 表格上运行不正常,也许是一个范围,或者我需要对正则表达式进行转义?

编辑:

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);
}

结果日志:

enter image description here

正则表达式详细信息

单独的正则表达式模式是

(?:^|,)(\d+)(?![^,])

匹配

  • (?:^|,) - 字符串或逗号的开头
  • (\d+) - 捕获第 1 组:一位或多位数字
  • (?![^,]) - 如果下一个字符不是逗号(数字后的下一个字符应该是逗号或字符串结尾),则匹配失败的否定前瞻。

重点是仅收集第 1 组值。

参见 its online demo

rango 正则表达式模式是

(?:^|,)(\d+)-(\d+)(?![^,])

参见 this online demo

它匹配:

  • (?:^|,) - 匹配字符串开头或逗号的非捕获组
  • (\d+) - 第 1 组:一个或多个数字
  • - - 一个连字符
  • (\d+) - 第 2 组:一个或多个数字
  • (?![^,]) - 如果下一个字符不是逗号,则匹配失败的否定前瞻。

重点是只收集第 1 组和第 2 组的值。

关于javascript - Google 工作表脚本中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52247201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com