gpt4 book ai didi

javascript - 正则表达式:优先匹配?

转载 作者:行者123 更新时间:2023-11-30 10:26:16 45 4
gpt4 key购买 nike

假设我有以下字符串:"a/b + c - e = d"

我想匹配以下任何一个:+/-。但是我希望 + 优先于 -/,我希望 - 优先于 / 以便首先找到这些字符。在常规字符类 [+-/] 中,它不会关心并且总是首先匹配 / 尽管我想匹配 +首先。

如何在一个正则表达式中做到这一点?我的实际用例有大约 10 个符号,我想用不同的优先级搜索每个符号,所以想要一些可维护的东西。

最佳答案

我认为正则表达式不适合这个,但我最终还是让它有点工作了。如果您有一组替代项,正则表达式引擎将按顺序尝试它们:

> /^(h|hello)(.*)$/.exec("hello")
["hello", "h", "ello"]

这让您可以设置某种优先级,但乍一看它不起作用,因为正则表达式引擎将在第一个匹配后停止查找。

您可以改为创建一个正则表达式,其中每个替代项最终都匹配整个字符串,如下所示:

> /^(.*)(\+)(.*)$|^(.*)(-)(.*)$|^(.*)(\/)(.*)$/.exec("a / b + c - e = d")
["a / b + c - e = d", "a / b ", "+", " c - e = d", undefined, undefined, undefined, undefined, undefined, undefined]

如您所见,它倾向于第一种选择,(.*)(\+)(.*)。如果您要在现实生活中使用它(尽管我希望您能转向真正的词法分析器和解析器!),您可能希望显式地使左通配符或右通配符不那么贪婪,这样您就可以明确关联性。另请记住,这不考虑带括号的术语,我不确定您是否可以得到一个正则表达式来做到这一点。

关于javascript - 正则表达式:优先匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472672/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com