JS 正则表达式以匹配字符串,令牌之间最多有 1 个空格

JS regex to match character string with maximum 1 space between tokens

本文关键字:空格 之间 令牌 正则表达式 字符串 JS      更新时间:2023-09-26

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

我想接受

a b cde f ghijk lm n

但拒绝

a b    cd   ef g

由于后者在令牌之间有多个空格字符

我有这个正则表达式

new RegExp('^[a-zA-Z0-9's?]+$', 'ig')

但它目前不拒绝之间包含 1 个以上空格字符的字符串。

有什么简单的方法来增强我当前的正则表达式吗?

谢谢

试试这种方法:

var str = "a b cde f ghijk lm n";
if(str.match(/'s's+/)){
   alert('it is not acceptable');
} else {
   alert('it is acceptable');
}


注意:正如@Wiktor Stribizew在评论中提到的,也许OP想要拒绝包含一些符号的字符串,例如$。因此,最好在这种情况下使用此正则表达式:

/[^a-zA-Z0-9's]|'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))

输出


JS小提琴:https://jsfiddle.net/igor_9000/ta216m3v/1/

希望对您有所帮助!

尝试以下正则表达式:

/^('S+'s?)+$/im.test(text)

其中parameter text是您要测试的任何字符串。

输出:

  • a b cde f ghijk lm n <-- match
  • but reject <-- match
  • a b cd ef g <-- no match

查看演示 https://regex101.com/r/lS4cU7/2

如果您的令牌只是 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+ 字母或数字
  • $ - 字符串结尾

这样,您可以将"单词"之间的空格数限制为仅出现 1 次。

如果计划允许前导/尾随空格,请在^之后和$之前添加's*