Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重复无序匹配的简单正则表达式_Javascript_Regex_Node.js - Fatal编程技术网

Javascript 重复无序匹配的简单正则表达式

Javascript 重复无序匹配的简单正则表达式,javascript,regex,node.js,Javascript,Regex,Node.js,我有这个正则表达式 /^[a-z]{1,}( (?=[a-z])){0,}(_(?=[a-z])){0,}[a-z]{0,}$/ 我想比赛 ag_b_cf_ajk 或 或 因此,任何由单个空格或下划线分隔的字符标记 (在上面的正则表达式中,我们有一个文字空格,这是合法的,我们有一个look aheads,确保空格或下划线后跟一个字符) 问题是,我上面的正则表达式只匹配第一个空格或下划线,如下所示: axz_be axz be 但这些都失败了 axz_be_j axz be j 为了解决这

我有这个正则表达式

/^[a-z]{1,}( (?=[a-z])){0,}(_(?=[a-z])){0,}[a-z]{0,}$/
我想比赛

ag_b_cf_ajk

因此,任何由单个空格或下划线分隔的字符标记

(在上面的正则表达式中,我们有一个文字空格,这是合法的,我们有一个look aheads,确保空格或下划线后跟一个字符)

问题是,我上面的正则表达式只匹配第一个空格或下划线,如下所示:

axz_be
axz be
但这些都失败了

axz_be_j
axz be j

为了解决这个问题,我相信我错过了一些正则表达式的概念,因为我已经尝试了几个小时了

看来你可以用

^[a-z]+(?:[_ ][a-z]+)*$

正则表达式匹配

  • ^
    -字符串的开头
  • [a-z]+
    -一个或多个小写ASCII字母
  • (?:[[a-z]+)*
    -零个或多个以下序列:
    • [\u]
      -空格或下划线
    • [a-z]+
      -一个或多个小写ASCII字母
  • $
    -字符串结尾
如果空格或下划线必须至少出现一次,请使用
+
量词而不是
*

^[a-z]+(?:[_ ][a-z]+)+$
                     ^
要将多字符替换为下划线和连字符,需要引入另一个非捕获组:

^[a-z]+(?:(?:[_ ]|\[])[a-z]+)+$

请参见

关于
^([a-z][]?)+$
?该
(?:…)
是一个非捕获组,仅用于对某些子模式进行分组,但不将捕获的文本存储在任何内存缓冲区中。谢谢,如果我想包括[]以及空格和下划线,该怎么办?我的问题是[]是两个字符而不是一个,我不知道如何在“or”语句中放置两个字符,其中空格和下划线并排。我在答案的底部添加了该示例。谢谢!我想你忘了转义字符“[]”变成“[]”了吧?我没有忘记,如果是JS,你不需要转义
]
,它不是字符类的一部分。
^[a-z]+(?:[_ ][a-z]+)+$
                     ^
^[a-z]+(?:(?:[_ ]|\[])[a-z]+)+$