在Javascript中使用正则表达式检查模式

时间:2013-12-05 14:47:54

标签: javascript regex

我正在尝试使用正则表达式检查字符串中的模式。 我的要求是

  1. 字符串应始终以%或(
  2. )开头
  3. %之后应该有一个数字,反之亦然,任何数字都应该以{{1​​}}始终
  4. 开头
  5. 该字符串只能包含以下字符和字% % ( ) and数值
  6. or

    Valid string (%1 and %2 or %3)

    我尝试了以下

    Invalid %%1

    请帮忙

4 个答案:

答案 0 :(得分:3)

这应该这样做:

^(?:\(|%[0-9]+)(?:\s+|%[0-9]+|and|or|\(|\))*$

以开始括号或百分比开头,然后是一系列数字,然后继续允许空格或百分比,后跟一系列数字,任意次。如果你给出一个更具体的例子,说明你想要匹配的东西,我可以更具体一些

enter image description here

这不会强制匹配括号。你需要一个递归的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]+[)]

http://RegExr.com?37h10