【问题标题】:Regex Pattern for Matching Single Lines of Text/Chars用于匹配单行文本/字符的正则表达式模式
【发布时间】:2019-01-27 22:06:31
【问题描述】:

说,对于以下字符串,我将使用什么正则表达式模式来匹配(并返回匹配数组)单行文本/字符(以字符开头,而不是符号和空格强>):

** Header
------------------------------------------------------------

https://www.google.com Google Homepage

Test description for Google homepage

Stack Overflow (https://www.stackoverflow.com)

Test description for Stack Overflow

...理想情况下,我希望 使用 Google Apps 脚本RegExpexec()Stringmatch() 得到这样的输出:

["https://www.google.com Google Homepage", "Test description for Google homepage", "Stack Overflow (https://www.stackoverflow.com)", "Test description for Stack Overflow"]

这是我目前的脚本:

function testRegex() {
  var test = "** Header\n------------------------------------------------------------\n\nhttps://www.google.com Google Homepage\n\nTest description for Google homepage\n\nStack Overflow (https://www.stackoverflow.com)\n\nTest description for Stack Overflow"
  var regExp = RegExp(".*");
  var matches = regExp.exec(test);

  for each (var match in matches) {
    Logger.log("match: " + match);
  }
}

...输出:

match: ** Header
match: 0
match: ** Header
------------------------------------------------------------

https://www.google.com Google Homepage

Test description for Google homepage

Stack Overflow (https://www.stackoverflow.com)

Test description for Stack Overflow

^ 请注意,匹配项不是单独记录在单行中的。

我还尝试了像 RegExp("^[a-zA-Z].*") 这样的正则表达式模式,仅用于以字符开头的行,但没有匹配项。

或者,我最好改用split() 吗?如果是这样,我想排除以符号或空格开头的行,并获得类似于我上面提到的输出。

【问题讨论】:

  • 你尝试了什么?看看 [regex101.com[(regex101.com)。如果您使用正则表达式。您是否要在换行符上拆分?
  • 是的,我尝试了该网站,但它可能具有欺骗性,因为 JavaScript 或至少 Google Apps 脚本似乎不支持 . 点表示法 - 所以我一直在尝试\\s\\S 与其他正则表达式组合从 exec()match() 函数输出匹配数组,但无济于事。另外,我稍微编辑了这个问题
  • 您能提供您当前的脚本吗?
  • 如果您包含您尝试过的内容以及确切没有按预期工作的内容,这将真正帮助我们帮助您。你得到了什么与你所期望的。帮助中心中有大量资源,解释了如何以有效帮助我们帮助您的方式编写问题。如果您在 javascript REPL 中尝试与在 Google Apps 中尝试,您实际上会得到不同的结果吗?
  • @Tanaike 好的,已更新。很抱歉首先没有包括我拥有的东西!

标签: javascript regex google-apps-script


【解决方案1】:

.* 匹配单行文本

^[a-zA-Z].* 匹配以字母开头的行

【讨论】:

  • . 点表示法不适用于 JavaScript,或者至少不适用于 Google Apps 脚本。因此,我一直使用\s\S 和其他一些正则表达式组合来输出使用exec()match() 的匹配数组。哦,顺便说一句,我编辑了这个问题
【解决方案2】:

这可能有点矫枉过正,但它确实有效。

const regex = /([A-Za-z\*\:\.\s/\-\(\)]*)(\\n)/gm;
const str = `** Header\\n------------------------------------------------------------\\n\\nhttps://www.google.com Google Homepage\\n\\nTest description for Google homepage\\n\\nStack Overflow (https://www.stackoverflow.com)\\n\\nTest description for Stack Overflow`;
const subst = `$1\n`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

See and modify this script on regex101

似乎split 可能更直接,但我假设您在发布之前尝试过,并且 Q 被标记为正则表达式。
另外,我怀疑上面的正则表达式可以大大简化。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多