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

在Javascript中使用正则表达式检查模式,javascript,regex,Javascript,Regex,我正在尝试使用正则表达式检查字符串中的模式。 我的要求是 字符串应始终以%或开头( 紧跟在%之后应该有一个数字,反之亦然,任何数字都应该始终以%开头 字符串只能包含以下字符和单词%()和或数值 有效字符串(%1和%2或%3) 无效的%%1 我尝试了以下方法 regex ^[%(]+[%0-9]+[(] 请帮助我会先删除字符串中的空白,以使正则表达式更简单 这与您所描述的并不完全相符,但符合我认为您正试图根据您的示例执行的操作: \(?%\d+\)?((and|or)\(?%\d+\)?)*

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

  • 字符串应始终以
    %
    或开头(
  • 紧跟在
    %
    之后应该有一个数字,反之亦然,任何数字都应该始终以
    %
    开头
  • 字符串只能包含以下字符和单词
    %
    数值
  • 有效字符串(%1和%2或%3)

    无效的%%1

    我尝试了以下方法

    regex ^[%(]+[%0-9]+[(]
    

    请帮助

    我会先删除字符串中的空白,以使正则表达式更简单

    这与您所描述的并不完全相符,但符合我认为您正试图根据您的示例执行的操作:

    \(?%\d+\)?((and|or)\(?%\d+\)?)*
    
    请注意,它不能保证括号都匹配。

    这应该可以做到:

    ^(?:\(|%[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和or之间缺少空格

    同样,不需要关闭方括号,使其匹配:%3和%4或(%2或%3) 并且它还匹配:%3和%4或(%2或%3)))

    它可以处理立即嵌套的括号,如:%3和%4或((%2或%3)和%9)

    我确信我错过了一些案例,请告诉我您遇到了什么问题,这里有一个解决方案:

    ^(%\d|\()(%\d|and|or|[\s()])*$
    

    这将匹配以“%N”开头的字符串,后跟“and”、“or”、空格、()和%的任意组合,后跟一个数字。

    试试这个,可能会有帮助:

    ^[%][0-9]+|^[(][%][0-9]+[)]
    

    看起来空白字符也可以,对吗?是的,空白字符是okTry regex^[%(]+[%0-9\s]+[])谢谢,这非常有效。可以解释一下正则表达式吗?当然可以。它有两个部分,每个部分由(?:)包围。“?”:意味着paren将不会捕获,它使正则表达式的速度加快了一点,如果您只需要检查正则表达式是否匹配,就可以使用它从字符串中提取匹配的内容。第一个括号内是(|%[-9]+。它匹配一个开始括号或一个百分比,后跟一个或多个数字。第二部分\s+|%[0-9]+|和|或|(|)匹配一个或多个空格或一个百分比,后跟一个或多个数字或“and”或“or”或括号0或多次。如果您想对某些内容进行具体解释,请告诉我。很多wolffer East看着下面Theox的答案,我忘了您可以将符号组合成一个或多个数字,这会使正则表达式变得更小。更改at out将为您提供(?:[\s()]+|%[0-9]+|和|或)*第二部分regex@RakeshKR,你是如何生成这个图像的?很好地组合了符号。我有一秒钟忘记了。你只是缺少了用一个开头开始字符串的选项paren@wolffer-东:的确,我改变了。我还看到我的正则表达式匹配字符串,如“%1 ANDANDANDANDANDOROR”这可能是不需要的。当我找到如何解决此问题时,我将编辑我的帖子。是的,我们必须将%\d(或者在我的例子中是%[0-9])从其余部分中分离出来。不确定是否需要空白