打字稿:正则表达式与预期模式不匹配

时间:2017-02-27 20:29:14

标签: javascript regex typescript webpack

我在打字稿函数中有以下正则表达式:

/([1-9][0-9]*)*?[d]([468]|(?!(22|32|42|52|62|72|82|92|102|200|202))([12][20]{1,2}))([rf!<>=][1-9][0-9]{1,2})*?/g

这个正则表达式的目的是匹配骰子命令,类似于roll20处理其骰子命令的方式(例如1d10!roll 1d10,如果它应该落在10上,它会滚动另一个d10,依此类推)

前两组工作正常(我可以在我的应用程序中单独运行,并确认它们按预期工作)。

最后一组([rf!<>=][1-9][0-9]{1,2})*?不匹配,除非我将^添加到正则表达式的开头,$添加到结尾。

作为附录,我确信有更有效的方法来编写这个正则表达式 - 如果你对正则表达式本身有任何意见也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

在正则表达式模式结尾处具有*?的延迟量化子模式将永远不会匹配单个字符,它将始终匹配空字符串。

你需要用它的贪婪对应物替换延迟量词,以避免在这里添加锚点,([rf!<>=][1-9][0-9]{1,2})*? - &gt; ([rf!<>=][1-9][0-9]{1,2})*