Lua模式匹配中的“. -”相当于正则表达式中的什么?

我正在将一些Lua代码移植到JS,但我以前从没有用过Lua。 有一个Lua模式“^([^ aeiouàèéêíòóôúïü] *)(。 - )$”,我在这里找到了连字符的解释[(http://lua-users.org/wiki/PatternsTutorial)]:

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

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

点赞
用户3832970
用户3832970

在Java中,.-实际上等同于[\s\S]*?(?s).*?,或者说更保险一些(?s:.*?),因为Lua模式中的.匹配任何字符(包括换行符号),而-是惰性的(非贪婪)量词,用于匹配0个或多个字符,即在正则表达式的NFA中使用的*?

参考Lua模式

. 匹配任何字符

然后

修饰符 `+´ 匹配一个或多个原始类的字符,它将总是获取匹配该模式的最长序列。

修饰符*´类似于 +´,但是它还接受原始类的字符的零次出现……

*´ 一样,修饰符 -´ 也匹配原始类中零个或多个出现次数。但是,它与最短匹配序列相匹配,而不是最长匹配序列。

2019-06-30 21:47:34
用户4984564
用户4984564

实际上,这个模式在许多语言中与相应的正则表达式几乎等效。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
2019-07-01 13:48:36