正则表达式检查字符串是否只给出了一组符号和内部定义的字符串

时间:2017-05-17 14:24:40

标签: javascript regex

我试图编写regexp来检查字符串是否仅包含给定的字符集(+-*/%|&<>= 1234567890)和$val内部(可能多次)。例如,$val > 100 && $val % 2 === 0应该被接受,但10 > 100 && 20 === 30不被接受。

我写了这个/^([\+\-\*\/%\&\|<>= \d]*(\$val)+[\+\-\*\/%\&\|<>= \d]*)+$/的正则表达式,但是每次我想添加一个新角色时我需要在2个地方添加它。有没有办法以更优雅的方式编写它?

2 个答案:

答案 0 :(得分:1)

您可以先使用前瞻检查“必须有$ val”条件,再结合交替使用模式检查第二个条件(不得有 $ val或合法字符) 。请注意,您可以将许多字符保留在字符类中,因此我们可以更简单地编写它:

^(?=.*\$val)(\$val|[-+*\/%|&=<> \d])+$

https://regex101.com/r/QZqz3l/2

答案 1 :(得分:0)

这可以满足您的需求吗?

(\$val\s*(\+|-|\*|\/|%|\||&|<|>|=)\s*\d+)\s+(&&\s+|===\s+\d+)

注意:我在这里使用全局匹配。

在这里测试:https://regex101.com/r/mUhPaK/1