javascript - 匹配变量项方程

标签 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)

到目前为止我的正则表达式是...

/([(])+([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/

相关文章:

javascript - 谷歌电子表格 "You do not have permission to call fetch"

java - perl 和 java 正则表达式功能之间有什么区别?

regex - “gsub”如何处理空格?

javascript - 下拉菜单未显示在表 : Tailwind, React

javascript - 我如何简单地从一个数组中取出一个属性并将其放入另一个数组中? Javascript

javascript - 使用 vue 的多个路由器

php - 使用过滤器(或 jquery)删除 Wordpress 图像周围的 anchor 元素

php - 更新记录时出错 : Invalid use of group function for updating previous all data

PHP mysqli_fetch_all 给我一个空白屏幕

php - 如何检查输入的值是否为货币