我正在将一些LUA代码移植到JS,但到目前为止,我还没有与Lua合作。有LUA模式"^([^aeiouàèéêíòóôúïü]*)(.-)$"
,我在这里找到了以下有关连字符的说明:
- 尽可能少次匹配上一个字符(或类(零或更多次。
我试图弄清楚同等的正则表达式是什么。另外,我不明白为什么首先需要这一点 - 在(.*)$
中结束是否足够?
在java中, .-
实际上等同于 [sS]*?
或 (?s).*?
或 - 要安全播放它- (?s:.*?)
,因为lua模式中的 .
与任何字符(包括line break chars(和 -
是匹配的与0或更多字符相匹配的懒惰(非绿色(量词,即常规NFA正则态度中的*?
。
请参阅LUA模式:
. all characters
,然后
`+´
修饰符匹配原始类的一个或多个字符。它将始终获得与模式相匹配的最长序列。
修饰符`*´
与`+´
相似,但它也接受类的字符零出现...
像`*´
一样,修饰符`-´
也匹配原始类的字符的零或更多。但是,它不匹配最长的序列,而是匹配最短的序列。
实际上,该模式在许多语言中几乎等同于相应的正则等级。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