我正在尝试使用正则表达式检查字符串中的模式。 我的要求是
- 字符串应始终以
%
或 ( - 紧接着
%
之后应该有一个数字,反之亦然,任何数字前面都应该有%
- 字符串只能包含以下字符和单词
%
(
)
and
or
数值
有效字符串(%1 和 %2 或 %3)
无效 %%1
我尝试了以下方法
regex ^[%(]+[%0-9]+[(]
请帮忙
最佳答案
这应该可以做到:
^(?:\(|%[0-9]+)(?:\s+|%[0-9]+|and|or|\(|\))*$
以左括号或百分比开头,然后是一系列数字,然后允许空格或百分比后跟一系列数字任意次数。如果你给出一个更具体的例子来说明你想要匹配的内容,我可以更具体
这不会强制匹配括号。你需要一个递归 js 函数来实现
编辑
好吧,这是一个更具体的函数,用于考虑分隔符周围的间距和数字
^(?:\(|%[0-9])(?:\sand\s|\sor\s|\(+)(?:(?:%[0-9]|\)+)(?:\s(?:and|or)\s(?:%[0-9]|(?:\(\s?)+))?)*\s?\)*$
这将匹配如下内容:%3 和 %4 或(%2 或 %3) 但在以下位置尝试时失败:%3 和 %4 或(%2 或 %3) 请注意 %4 和 或 之间缺少的空格
同样,括号不需要关闭,因此它匹配:%3 和 %4 或 ( %2 或 %3 并且它还匹配:%3 和 %4 或 (%2 或 %3))))
它可以处理立即嵌套的括号,如下所示:%3 和 %4 或 ((%2 或 %3) 和 %9 )
我确定我漏掉了一些案例,请告诉我您遇到了什么问题
关于javascript - 在 Javascript 中使用正则表达式检查模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403036/