2

我无法制作零或一“?” 在javascript中优先出现一次而不是零。

前任。这是我的正则表达式:(=1)?

这是我的字符串,str:abcd=1

当我这样做时,regex.exec(str)我得到以下返回:["",undefined]。看起来它在我的字符串的开头选择了零长度匹配。有没有办法让它选择'=1'?可能这在其他语言中可能会有所不同,但我目前正在使用 javascript,这似乎是这种情况。

4

3 回答 3

3

该表达式(=1)? 优先于一次出现而不是零,但正则表达式引擎将始终尝试尽可能早地匹配字符串。所以从字符串中的第一个字符开始,首先它会尝试匹配=1并失败,然后因为?它会匹配空字符串。

我认为以下表达式与您的意图最相似:

(?:.*(=1))?

如果它位于字符串中的任何位置,这将放入第一个捕获组,但由于使非捕获组可选=1,每个字符串仍将匹配。?

于 2013-06-11T16:45:31.787 回答
1

在javascript中默认?是贪婪的。你的问题在别的地方。

旁注:要?懒惰,您必须编写??(像其他量词一样)

于 2013-06-11T16:46:05.480 回答
0

(=1)*将匹配=1=1=1=1=1=1=1=1

如果您希望匹配之后的所有数字,请=使用

abcde=(\d+)

这会将所有数字放入捕获组 1。

于 2013-06-11T16:41:34.730 回答