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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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_String - Fatal编程技术网

Javascript 验证整个字符串并获取所有匹配项

Javascript 验证整个字符串并获取所有匹配项,javascript,regex,string,Javascript,Regex,String,我想验证我的字符串输入,如果它包含由空格分隔的数字。我试着用正则表达式 ^(\d)(?:\s(\d))*$ 并且能够通过test(String)方法检查有效性,但是当我使用str.split(regex)时,它没有给我正确的匹配 例如,我有以下输入: 2 3 4 5 当我尝试使用split方法时,我得到 ["", "2", "5", ""] 我原以为结果会是这样的 ["2", "3", "4", "5"] 非常感谢您的任何建议,谢谢 使用正则表达式\d+和全局选项g(它告诉.match返

我想验证我的字符串输入,如果它包含由空格分隔的数字。我试着用正则表达式

^(\d)(?:\s(\d))*$
并且能够通过
test(String)
方法检查有效性,但是当我使用
str.split(regex)
时,它没有给我正确的匹配

例如,我有以下输入:

2 3 4 5
当我尝试使用
split
方法时,我得到

["", "2", "5", ""]
我原以为结果会是这样的

["2", "3", "4", "5"]

非常感谢您的任何建议,谢谢

使用正则表达式
\d+
和全局选项g(它告诉
.match
返回所有匹配项,而不仅仅是第一个匹配项):

“2 3 4 5”。匹配(/\d+/g)

结果:
[“2”、“3”、“4”、“5”]


编辑:要测试输入字符串的有效性(要求:用空格分隔的数字),请使用:

(/^(\d)+\d?$/).test(“1234A”)


(\d)+
匹配一个数字后跟空格的任意重复次数,
\d?
匹配一个可能的尾随数字,后面没有空格字符。

使用正则表达式
\d+
和全局选项g(该选项告诉
.match
返回所有匹配项,而不仅仅是第一个匹配项):

“2 3 4 5”。匹配(/\d+/g)

结果:
[“2”、“3”、“4”、“5”]


编辑:要测试输入字符串的有效性(要求:用空格分隔的数字),请使用:

(/^(\d)+\d?$/).test(“1234A”)

(\d)+
匹配一个数字后面跟一个空格的任意重复次数,
\d?
匹配一个可能的尾随数字,但后面没有空格字符。

您的
^(\d)(?:\s(\d))*$
正则表达式将字符串正确拆分为
[,“2”,“5”,“”“]”
,因为:

  • 第一个
    (\d)
    捕获字符串开头的数字,并将其插入结果数组中。因为数字是在开头找到的,所以字符串开始之前的空字符串和第一个数字显示为第一个数组元素,
    2
    是第二个数组元素
  • (?:\s(\d))*
    构造是一个
    *
    量化的非捕获组,它匹配0+个后跟数字的空格序列,并捕获该数字。也就是说,每次匹配空格+数字时,第2组插槽都会重新写入一个新值,最后一个插槽会保持这种状态,即
    5
    。由于右侧拆分边框出现在字符串的末尾,因此将空字符串添加到结果数组中
如果您的字符串已经过验证,则不需要
/\d+/g
,只需使用空格分割即可(请注意,捕获组在正则表达式中是多余的):

var s=“2 3 4 5”;
如果(/^\d(?:\s\d)*$/.test){
console.log(s.split(“”);
}
//var s=“2 3 4 a”;将不显示任何输出
您的
^(\d)(?:\s(\d))*$
正则表达式将字符串正确拆分为
[“”,“2”,“5”,““”]
,因为:

  • 第一个
    (\d)
    捕获字符串开头的数字,并将其插入结果数组中。因为数字是在开头找到的,所以字符串开始之前的空字符串和第一个数字显示为第一个数组元素,
    2
    是第二个数组元素
  • (?:\s(\d))*
    构造是一个
    *
    量化的非捕获组,它匹配0+个后跟数字的空格序列,并捕获该数字。也就是说,每次匹配空格+数字时,第2组插槽都会重新写入一个新值,最后一个插槽会保持这种状态,即
    5
    。由于右侧拆分边框出现在字符串的末尾,因此将空字符串添加到结果数组中
如果您的字符串已经过验证,则不需要
/\d+/g
,只需使用空格分割即可(请注意,捕获组在正则表达式中是多余的):

var s=“2 3 4 5”;
如果(/^\d(?:\s\d)*$/.test){
console.log(s.split(“”);
}

//var s=“2 3 4 a”;不会显示任何带有空格的输出。为什么要使用相同的验证正则表达式来获取单独的数字?请澄清。顺便说一句,
[”“,“2”,“5”,“”“]
是正则表达式拆分的正确输出。要获取数字,只需使用
\d+
匹配();你不能用空格分割字符串,或者也应该应用什么规则?用空格分割。为什么要使用相同的验证正则表达式来获取单独的数字?请澄清。顺便说一句,
[”“,“2”,“5”,“”“]
是正则表达式拆分的正确输出。要获取数字,只需使用
\d+
匹配();你不能用空格分割字符串,或者也应该应用什么规则?谢谢,但是如果我输入
2 3 4 a
,我将如何验证输入?
test
方法在输入时返回true使用单独的
.test
验证输入字符串。我编辑了答案以包含输入验证。谢谢,但是如果我输入
2 3 4 a
,我将如何验证输入?
test
方法在输入时返回true使用单独的
.test
来验证输入字符串。我编辑了答案以包含输入验证。