我正在将一些Lua代码移植到JS,到目前为止,我还没有使用过Lua。
有Lua模式"^([^aeiouàèéêíòóôúïü]*)(.-)$"
,我发现连字符here的以下解释:
-将上一个字符(或类)匹配零次或多次,次数尽可能少。
我正在尝试找出与正则表达式等效的内容。我也不明白为什么首先需要这样做-以(.*)$
结尾就不够了吗?
答案 0 :(得分:2)
在Java中,.-
实际上等效于[\s\S]*?
或(?s).*?
,或者-为了安全起见-(?s:.*?)
,因为Lua模式中的.
与任何字符(包括换行符),并且-
是与0个或多个字符匹配的惰性(非贪婪)量词,即常规NFA regex中的*?
。
请参见Lua patterns:
. all characters
然后
`+´
修饰符与原始类的一个或多个字符匹配。它总是会得到与模式匹配的最长序列。
修饰符`*´
与`+´
类似,但它也接受零次出现的类字符...
像`*´
一样,修饰符`-´
也匹配原始类的零个或多个字符。但是,它不匹配最长的序列,而是匹配最短的序列。
答案 1 :(得分:0)
实际上,该模式与许多语言中的相应正则表达式相当。 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