Javascript 匹配变量项方程

Javascript 匹配变量项方程,javascript,php,regex,Javascript,Php,Regex,我试图开发一个正则表达式来匹配以下等式: (Price+10%+100+200) (Price+20%+200) (Price+30%) (Price+100) (Price-10%-100-200) (Price-20%-200) (Price-30%) (Price-100) (Price+100+10%) (Price+100+100) (Price+200) (Price-100-10%) (Price-100-100) (Price-200) 到目前为止我的正则表达式是 /([(

我试图开发一个正则表达式来匹配以下等式:

(Price+10%+100+200)
(Price+20%+200)
(Price+30%)
(Price+100)

(Price-10%-100-200)
(Price-20%-200)
(Price-30%)
(Price-100)
(Price+100+10%)
(Price+100+100)
(Price+200)
(Price-100-10%)
(Price-100-100)
(Price-200)
到目前为止我的正则表达式是

/([(])+([P])+([r])+([i])+([c])+([e])+([+]|[-]){1}([\d])+([+]|[-])?([\d])+([%])?([)])/g
…,但它仅匹配以下方程式:

(Price+10%+100+200)
(Price+20%+200)
(Price+30%)
(Price+100)

(Price-10%-100-200)
(Price-20%-200)
(Price-30%)
(Price-100)
(Price+100+10%)
(Price+100+100)
(Price+200)
(Price-100-10%)
(Price-100-100)
(Price-200)
有人能帮我理解如何使我的模式与提供的全套方程式相匹配吗

注:括号和“价格”是模式必须匹配的等式中的必输项

/^[(Price]+\d+\d+([%]|[)])&/i

试试看,风险自负

试试这个,它匹配问题中提供的所有输入字符串:

/\(Price([+-]\d+%?){1,3}\)/g
你可以在实验室里测试它

注意事项:

  • 仅在要分组的位置使用括号。单个可能性、固定数量匹配(例如,
    ([P])
    周围的括号不提供值
  • 将字符类(用
    [
    打开,用
    ]
    关闭)用于可在模式中某个位置匹配的多个字符(例如
    [+-]
    )。单一可能性字符类(例如
    [P]
    )同样不提供值
  • 是的,字符类(通常)隐式转义其中的正则表达式特殊字符(例如
    [(]
    中的
    )与等效的
    \(
    在字符类之外),但要转义正则表达式特殊字符(即字面上匹配它们),最好不要使用字符类而只是转义它们(例如,
    \(
    )–除非模式中的某个位置有多个字符匹配(根据前面要注意的点)
  • 量词
    {1}
    总是(几乎)无用的:把它丢掉
  • 量词
    +
    的意思是你可能知道的“一个或多个”。然而,在你使用它的一系列情况下(例如
    ([(])+([P])+([r])+([i])+([c])+([e])+
    ),它会匹配许多我怀疑你期望的值(例如基本上,不要过度使用它。停止考虑是否真的要匹配一个或多个字符(类)或在代码中应用了<代码> +/>代码>的组。
  • 要匹配没有任何正则表达式特殊字符(如
    Price
    )的文本字符串,只需在模式中的适当位置使用文本字符串,例如
    \(Price
    )中的
    Price
/\(价格[+-](\d)+%)?([+-]\d+%?)?([+-]\d+%?)?\)/g


很高兴听到这一点。我在阅读了你开始的模式的基础上增加了一些你想考虑的笔记。非常感谢你,我正准备以我的正则表达式为基础提问。我很高兴读你的笔记。现在我会在制作正则表达式之前牢记在心。