【问题标题】:Correct syntax for regex to limit total length of matched group正则表达式的正确语法以限制匹配组的总长度
【发布时间】:2018-08-24 17:23:48
【问题描述】:

我想制作一个匹配名称的正则表达式,它可以包含多个单词。 但同时我想将总长度限制为 20。

我使用了/\b(\w+ (\s\w+)*){1,20}\b/

我得到了语法,但它没有检查字长限制。为什么?

注意:我正在用 Javascript 编写代码。

【问题讨论】:

  • 您将整个“名称”块重复多达 20 次。
  • 您是否希望整个匹配最多包含 20 个字符?还是您希望每个组的长度最多为 20?
  • 发布一些输入示例及其预期输出可能会有所帮助
  • 我希望整个匹配最多包含 20 个字符。
  • @LightnessRacesinOrbit 这不是解决问题的方法,你的意思是如果你不能开车,那就坐出租车。

标签: javascript regex


【解决方案1】:

var test = [
    "abc123 def456 ghi789",
    "123456789012345678901",
    "123456",
];
console.log(test.map(function (a) {
  return a+' :'+/^(?=.{1,20}$)\w+(?: \w+)*$/.test(a);
}));

说明:

^                   : beginning of line
    (?=.{1,20}$)    : positive lookahead, make sure we have no more than 20 characters
    \w+             : 1 or more word character
    (?: \w+)*       : a space followed by 1 or more word char, may appear 0 or more times
$

【讨论】:

    【解决方案2】:

    Limit number of character of capturing group

    这仍然匹配,但限制为 20 个。(经过一些编辑,但我认为它得到了它......)

    let rx = /(?=\b(\w+(\s\w+)*)\b).{1,20}/
    
    let m = rx.exec('one two three four')
    console.log(m[0])
    console.log(m[0].length)
    
    m = rx.exec('one two three four five six seven eight')
    console.log(m[0])
    console.log(m[0].length)
    
    m = rx.exec('wwwww wwwww wwwww wwwww wwwww')
    console.log(m[0])
    console.log(m[0].length)

    【讨论】:

    • 他们希望 total 长度小于或等于 20。
    • 这不起作用,就像它只是检查最后一个单词的约束,如果它小于 20 它允许任何字符串 "wwwwwwwwwwwwwwwwwwwwwwwwwww" 也可以工作。另外我希望整个字符串的长度小于 20。
    • @DeepakYadav 请确认它按预期工作。谢谢。
    • @StevenSpungin:它正在工作 :) 谢谢我意外地使用了不同的正则表达式 whixh 似乎也能正常工作,但我没有解释为什么它工作:( 我用过 /(\b (\w(\s\w+)*)\b){1,20}/
    【解决方案3】:

    稍作修改 - 试试这个({1, 20} 在外面 here:

    (\b(\w+ (\s\w+)*)\b){1,20}
    

    【讨论】:

    • 他们希望 total 长度小于或等于 20。
    • 它正在工作 :) 有什么方法可以不让用户输入带有空格的名称,例如“deepak”是不允许的。
    • @DeepakYadav:不,它不起作用,它匹配abcdefghi qsjhfjsqh fsjkhffjhg
    • @Toto :是的,它不起作用,但我不小心使用了错误的正则表达式,它正在起作用,但现在我不知道它为什么起作用:(我使用了 /(\b(\w(\s \w+)*)\b){1,20}/
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 2015-01-31
    • 2012-07-18
    • 2016-04-02
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多