在Lua的模式匹配中,RegEx相当于“ .-”的含义是什么?

时间:2019-06-30 19:27:20

标签: javascript regex lua lua-patterns

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

  

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

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

2 个答案:

答案 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