Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 JS regex用于匹配令牌之间最大间距为1的字符串_Javascript_Regex_String - Fatal编程技术网

Javascript JS regex用于匹配令牌之间最大间距为1的字符串

Javascript JS regex用于匹配令牌之间最大间距为1的字符串,javascript,regex,string,Javascript,Regex,String,我正在对一些字符串进行模式匹配,以查看它们是否匹配- 我想接受 a b cde f ghijk lm n 但拒绝 a b cd ef g 因为后者在标记之间有多个空格字符 我有这个正则表达式 new RegExp('^[a-zA-Z0-9\s?]+$', 'ig') 但它目前并不拒绝中间有超过1个空格字符的字符串 有什么简单的方法来增加我现在的正则表达式吗 谢谢如果您的令牌只是ASCII字母或数字,请使用 var regex = /^[a-z0-9]+(?:\s[a-z0-9]+

我正在对一些字符串进行模式匹配,以查看它们是否匹配-

我想接受

a b cde f ghijk lm n
但拒绝

a b    cd   ef g
因为后者在标记之间有多个空格字符

我有这个正则表达式

new RegExp('^[a-zA-Z0-9\s?]+$', 'ig')
但它目前并不拒绝中间有超过1个空格字符的字符串

有什么简单的方法来增加我现在的正则表达式吗


谢谢

如果您的令牌只是ASCII字母或数字,请使用

var regex = /^[a-z0-9]+(?:\s[a-z0-9]+)*$/i;

模式匹配:

  • ^
    -字符串的开头
  • [a-z0-9]+
    -一个或多个字母或数字
  • (?:\s[a-z0-9]+)*
    -0+序列:
    • \s
      -任何空格,1个符号
    • [a-z0-9]+
      -0+字母或数字
  • $
    -字符串结尾
这样,您可以将“单词”之间的空格数限制为仅出现一次

如果您计划允许前导/尾随空格,请在
^
之后和
$
之前添加
\s*
,尝试以下方法:

var str=“a b cde f ghijk lm n”;
if(str.match(/\s\s+/)){
警报(“不可接受”);
}否则{
警报(“可接受”);

}
您必须使用正则表达式吗?为什么不检查字符串是否有两个空格

JavaScript

strAccept = "a b c def ghijk lm n";
strReject = "a b    cd   ef g";


function isOkay(str) {
    return str.indexOf('  ') == -1 && str.indexOf(' ') >= 0;
}


console.log(isOkay(strAccept))
console.log(isOkay(strReject))
输出

strAccept = "a b c def ghijk lm n";
strReject = "a b    cd   ef g";


function isOkay(str) {
    return str.indexOf('  ') == -1 && str.indexOf(' ') >= 0;
}


console.log(isOkay(strAccept))
console.log(isOkay(strReject))
正确
假的

JS小提琴:

希望有帮助

试试下面的正则表达式:

/^(\S+\s?)+$/im.test(text)
其中,
参数文本
是要测试的字符串

输出:


  • a b cde f ghijk lm n答案可以在这里找到:@CameronMeador:是的,可以找到,但不清楚。根本没有解释正确的正则表达式。此外,如果必须支持前导/尾随空格,则该帖子不提供有效的解决方案。这允许使用
    $$$$$
    @WiktorStribiżew-Well之类的字符串。它有什么问题<代码>$$$
    仅包含一个空格,可以接受。。。我说的对吗?模式是
    ^[a-zA-Z0-9\s?]+$
    。它在哪里接受
    $
    ?@WiktorStribiżew我在我的答案中添加了一个注释。这也允许使用类似
    $
    的字符串。这就是为什么正则表达式是必需的。@WiktorStribiżew OP声明要求接受带单空格的字符串,因此应接受$$$$$。不,要求字符串首先满足
    ^[a-zA-Z0-9\s?]+$
    模式,然后它们在标记之间只应包含1个空格。通过修复regexp可以很容易地解决这个问题,没有多余的代码行。我不相信这是正确的,但我会让OP来澄清。我需要验证只有字母和数字,只有单个空格,所以regex是最合适的。这是否允许后面有空格,原样?如果您想允许前导/尾随空格,只需添加
    \s*
    var regex=/^\s*[a-z0-9]+(?:\s[a-z0-9]+)*\s*$/i