我正在尝试开发一个正则表达式来匹配以下等式:
(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([+-]\d+%?){1,3}\)/g
您可以在 regex fiddle 中对其进行测试.
注意事项:
- 仅在要分组的地方使用括号。围绕单一可能性、固定数量匹配的括号(例如
([P])
不提供任何值。 - 使用字符类(以
[
开头,以]
结尾)用于多个 可以在模式中的某个位置匹配的字符(例如[+-]
)。单一可能性字符类(例如[P]
)同样没有提供任何值(value)。 - 是的,字符类(通常)隐式转义其中的正则表达式特殊字符(例如
[(]
中的(
与等效的\(
在字符类之外),但要只是转义正则表达式特殊字符(即按字面匹配它们),最好不要使用字符类而只是转义它们(例如\(
) – 除非多个字符应该在模式中的一个位置匹配(根据前面要注意的一点)。 - 量词
{1}
(几乎)总是没用:放弃它。 - 正如您可能知道的那样,量词
+
表示“一个或多个”。但是,在您使用它的一系列情况下(即([(])+([P])+([r])+([i])+([c])+([e] )+
), 它会匹配许多我怀疑你期望的值(例如想要匹配+
在模式中应用的一个或多个字符(类)或组。 - 要匹配没有任何正则表达式特殊字符(如
Price
)的文字字符串,只需在模式中的适当位置使用文字字符串 - 例如价格
\(价格
。
关于javascript - 匹配变量项方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773559/