代码之家  ›  专栏  ›  技术社区  ›  CheeseFlavored

正则表达式以防止同一字符在一行中出现3次以上

  •  0
  • CheeseFlavored  · 技术社区  · 5 年前

    我想要一个javascript函数,它可以防止同一个字符在输入字段的一行中出现3次以上。我知道如何用一次重复就可以很容易地做到这一点。例如。。。

    function deleteit() {message.value=message.value.replace(/(.)\1/g,'')} 
    <input type='text' id='message' onkeyup='deleteit()'>

    如果在此处多次输入同一字符,则第二个字符将被删除。我希望最多允许3个,并在4号删除。例如,“Yippy!!!”可以接受,但输入“Yippy!!!!”将删除第四个感叹号。我试着把正则表达式改成 /(..)\1/g 这确实管用,但不完全管用。它删除了2个“组”的字符,所以如果我键入类似“YOYO”的内容,它会删除它。如何将4个或更多相同字符更改为3个。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Wiktor Stribiżew    5 年前

    你可以用

    function deleteit() {message.value=message.value.replace(/((.)\2{2})\2+/g,'$1')}
    <input type='text' id='message' onkeyup='deleteit()'>

    正则表达式详细信息

    • ((.)\2{2}) -第1组( $1 在替换模式中,引用此组值):
      • (.) -第2组:除换行符以外的任何字符
      • \2{2} -组2值出现两次
    • \2+ -组2值的一次或多次出现

    看到了吗 regex demo .

        2
  •  0
  •   DennisVM-D2i    5 年前

    我本以为这就是你要找的:

    搜索模式:

    (.)(\1)\1+
    

    替换模式:

    $1$2
    

    https://regex101.com/r/tAFNUa/1

    推荐文章