【问题标题】:What is the RegEx equivalent of ".-" in Lua's pattern matching?Lua 模式匹配中“.-”的 RegEx 等价物是什么?
【发布时间】:2019-11-11 15:02:00
【问题描述】:

我正在将一些 Lua 代码移植到 JS,但到目前为止我还没有使用过 Lua。 有 Lua 模式 "^([^aeiouàèéêíòóôúïü]*)(.-)$",我发现连字符 here 的以下解释:

- 匹配前一个字符(或类)零次或多次,尽可能少。

我试图弄清楚正则表达式的等价物是什么。另外我不明白为什么首先需要这样做 - 以(.*)$ 结尾就足够了吗?

【问题讨论】:

  • "以 (.*)$ 结尾不够吗?它是等价的,但我猜.- 表达了一些意图为“匹配尽可能少的字符”

标签: javascript regex lua lua-patterns


【解决方案1】:

在 Java 中,.- 实际上等同于 [\s\S]*?(?s).*?,或者 - 为了安全起见 - (?s:.*?),因为 Lua 模式中的 . 匹配任何字符(包括换行字符)和 @ 987654327@ 是匹配 0 个或多个字符的惰性(非贪婪)量词,即常规 NFA 正则表达式中的 *?

Lua patterns:

. all characters

然后

`+´ 修饰符匹配原始类的一个或多个字符。它将始终获得与模式匹配的最长序列。

修饰符 `*´ 类似于 `+´,但它也接受该类字符的零次出现...

`*´ 一样,修饰符`-´ 也匹配原始类的零个或多个字符。但是,它不是匹配最长的序列,而是匹配最短的序列。

【讨论】:

    【解决方案2】:

    实际上,该模式几乎等同于许多语言中的相应正则表达式。 Javascript 似乎没有 - 量词,但你应该可以用 .* 替换它,它应该仍然可以工作。

    试试"^([^aeiouàèéêíòóôúïü]*)(.*)$"

    当然,你也可以在 Lua REPL 中进行测试:

    Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
    > orig = '^([^aeiou]*)(.-)$'
    > modif = '^([^aeiou]*)(.*)$'
    > ("jhljkhaaaasjkdf"):match(orig)
    jhljkh  aaaasjkdf
    > ("jhljkhaaaasjkdf"):match(modif)
    jhljkh  aaaasjkdf
    > -- QED
    

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2015-06-22
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多