我试图编写regexp来检查字符串是否仅包含给定的字符集(+-*/%|&<>= 1234567890
)和$val
内部(可能多次)。例如,$val > 100 && $val % 2 === 0
应该被接受,但10 > 100 && 20 === 30
不被接受。
我写了这个/^([\+\-\*\/%\&\|<>= \d]*(\$val)+[\+\-\*\/%\&\|<>= \d]*)+$/
的正则表达式,但是每次我想添加一个新角色时我需要在2个地方添加它。有没有办法以更优雅的方式编写它?
答案 0 :(得分:1)
您可以先使用前瞻检查“必须有$ val”条件,再结合交替使用模式检查第二个条件(不得有但 $ val或合法字符) 。请注意,您可以将许多字符保留在字符类中,因此我们可以更简单地编写它:
^(?=.*\$val)(\$val|[-+*\/%|&=<> \d])+$
答案 1 :(得分:0)
这可以满足您的需求吗?
(\$val\s*(\+|-|\*|\/|%|\||&|<|>|=)\s*\d+)\s+(&&\s+|===\s+\d+)
注意:我在这里使用全局匹配。