Lua 模式匹配中“.-”的 RegEx 等价物是什么?

What is the RegEx equivalent of ".-" in Lua's pattern matching?

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

- Match the previous character (or class) zero or more times, as few times as possible.

我正在尝试找出与正则表达式等效的内容。我也不明白为什么首先需要这个 - 以 (.*)$ 结尾还不够吗?

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

参见Lua patterns

. all characters

然后

The `+´ modifier matches one or more characters of the original class. It will always get the longest sequence that matches the pattern.

The modifier `*´ is similar to `+´, but it also accepts zero occurrences of characters of the class...

Like `*´, the modifier `-´ also matches zero or more occurrences of characters of the original class. However, instead of matching the longest sequence, it matches the shortest one.

实际上,该模式与许多语言中相应的正则表达式非常等价。 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