【问题标题】:How to use Regex to parse variable length string in Google Application Scripts如何使用正则表达式解析谷歌应用程序脚本中的可变长度字符串
【发布时间】:2020-10-19 20:01:34
【问题描述】:

尝试使用 Google 应用程序脚本中的正则表达式提取具有已知模式的可变长度字符串的字母数字部分。模式重复 n 次如下(XXX 是字母数字字符组): XX-XXX-X-XX-XX-........ 例如 ABC-AB 或 ABCD-AB-ABC-AA 如果可能的话,我想将字母数字部分提取到一个数组中,例如 e[0] = ABCD e[1] = AB e[2] = ABC .....

我尝试重复 \w+ 但这需要知道字符串的可能长度。见下文。 Regex 有没有办法处理不同大小的字符串?请参阅下面的示例代码:

var data1 = 'ABC-AB';
var data2 = 'ABCD-AB-ABCD-AA';

var regex1 = new RegExp(/(\w+)-(\w+)/); 
var regex2 = new RegExp(/(\w+)/);

e = regex1.exec(data1); //stores ABC and AB as separate array elements.

这很好,但不适用于更大尺寸的字符串

e = regex2.exec(data2); //stores ABCD only as a single array element "ABCD"

【问题讨论】:

  • 匹配重复的字符串并在-上拆分

标签: regex google-apps-script


【解决方案1】:

匹配任意长度的kebab大小写字母:

var regex1 = new RegExp(/\w+(-\w+)*/)

对于找到的每个匹配项,将结果拆分为破折号以获取您的数组。

var array = found.split("-")

【讨论】:

  • 我尝试了您的 Regex1 建议: var regex1 = new RegExp(/\w+(-\w+)*/) on 'ABC-AB-ABCD-AA' 并导致“-AA”得到分组在我的数组中。我不清楚您打算如何使用代码。请澄清。
  • 根据答案,regex1 将查找所有 kebab case 序列,例如它将匹配来自 foo ABC-AB-ABCD-AA barABC-AB-ABCD-AA。提取了该匹配项(我不熟悉 Google 应用程序脚本,所以我不知道语法,但我确信可以完成),然后将提取的匹配项拆分为连字符,这将导致数组[ABC, AB, ABCD, AA]
  • 谢谢,但我的问题不是从随机序列中提取烤肉串序列。我已经有了一个烤肉串序列。我试图找到一个正则表达式,它将烤肉串序列的字母数字部分提取到一个数组中。所以从ABC-AB-ABCD-AA-(变长)变成[ABC, AB, ABCD, AA,(变长)]
  • 但是您向我介绍了 .split 方法,这是一种更简单的解决方案。所以我所要做的就是 e = data2.split('-');我得到了我想要的数组。不过,如果 Regex 可以应用于可变长度的字符串,这是一个奇怪的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多