我正在尝试使用正则表达式检查字符串中的模式。 我的要求是
%
或(%
之后应该有一个数字,反之亦然,任何数字都应该以{{1}}始终%
%
(
)
and
数值 or
Valid string (%1 and %2 or %3)
我尝试了以下
Invalid %%1
请帮忙
答案 0 :(得分:3)
这应该这样做:
^(?:\(|%[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)
我确定我错过了案例,让我知道你遇到的问题
答案 1 :(得分:0)
我会首先从字符串中删除空格,以使正则表达式更容易。
这与您描述的完全不符,但根据您的示例匹配我认为您尝试做的事情:
\(?%\d+\)?((and|or)\(?%\d+\)?)*
请注意,它并不保证括号全部匹配。
答案 2 :(得分:0)
这是一个解决方案:
^(%\d|\()(%\d|and|or|[\s()])*$
这将匹配以“%N”开头的字符串,后跟“and”,“或”,空格,()和%后跟数字的任意组合。
答案 3 :(得分:0)
^[%][0-9]+|^[(][%][0-9]+[)]