我正在尝试开发一个正则表达式来匹配以下等式:
(Price+10%+100+200)
(Price+20%+200)
(Price+30%)
(Price+100)
(Price-10%-100-200)
(Price-20%-200)
(Price-30%)
(Price-100)
到目前为止我的正则表达式是......
/([(])+([P])+([r])+([i])+([c])+([e])+([+]|[-]){1}([\d])+([+]|[-])?([\d])+([%])?([)])/g
...,但它只匹配以下等式:
(Price+100+10%)
(Price+100+100)
(Price+200)
(Price-100-10%)
(Price-100-100)
(Price-200)
有人可以帮我理解如何让我的模式与提供的全套方程式相匹配吗?
注意:圆括号和' Price'是模式必须匹配的方程中的必须条件。
答案 0 :(得分:1)
试试这个,它匹配问题中提供的所有输入字符串:
/\(Price([+-]\d+%?){1,3}\)/g
您可以在regex fiddle。
中对其进行测试注意事项:
([P])
不提供任何价值。[
打开并使用]
结束)(例如[+-]
) 。单一可能性字符类(例如[P]
)同样没有提供任何价值。(
中的[(]
与字符类外的等效\(
,但是只是转义正则表达式特殊字符(即按字面意思匹配),最好不要使用字符类并只是转义它们(例如\(
) - 除非多个字符在模式中的某个位置匹配(按照前面的注意事项)。{1}
(几乎)总是无用的:放弃它。+
表示"一个或多个"你可能知道的。但是,在您使用它的一系列情况下(即([(])+([P])+([r])+([i])+([c])+([e])+
),它会匹配我怀疑您期望的许多值(例如((((((PPPrriiiicccceeeeee
):基本上,不要过度使用它。请停止考虑您是否真的希望匹配模式中+
适用的字符(类)或组的或更多。Price
)的文字字符串,只需在模式中的适当位置使用文字字符串 - 例如Price
中的\(Price
。答案 1 :(得分:1)
/\(Price[+-](\d)+(%)?([+-]\d+%?)?([+-]\d+%?)?\)/g
答案 2 :(得分:0)
/^[(Price]+\d+\d+([%]|[)])&/i
自担风险!