我在打字稿函数中有以下正则表达式:
/([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})*?
不匹配,除非我将^
添加到正则表达式的开头,$
添加到结尾。
作为附录,我确信有更有效的方法来编写这个正则表达式 - 如果你对正则表达式本身有任何意见也是受欢迎的。
答案 0 :(得分:2)
在正则表达式模式结尾处具有*?
的延迟量化子模式将永远不会匹配单个字符,它将始终匹配空字符串。
你需要用它的贪婪对应物替换延迟量词,以避免在这里添加锚点,([rf!<>=][1-9][0-9]{1,2})*?
- &gt; ([rf!<>=][1-9][0-9]{1,2})*
。