javascript - 正则表达式防止同一字符连续出现超过 3 次
问题描述
我想要一个 javascript 函数,它可以防止同一字符在输入字段中连续出现 3 次以上。我知道如何通过 1 次重复轻松做到这一点。例如...
function deleteit() {message.value=message.value.replace(/(.)\1/g,'')}
<input type='text' id='message' onkeyup='deleteit()'>
如果您在此处多次输入相同的字符,则第二个字符将被删除。我想最多允许 3 个并在 4 号删除。例如,“Yippy!!!” 可以接受,但输入“Yippy!!!!” 将删除第 4 个感叹号。我尝试将正则表达式更改为/(..)\1/g
That does work,但不完全。它正在删除 2 个“组”字符,所以如果我输入“YOYO”之类的内容,它会删除它。如何将 4 个或更多相同字符更改为 3 个。
解决方案
您可以使用
function deleteit() {message.value=message.value.replace(/(.)(\1{2})\1+/g,'$1$2')}
<input type='text' id='message' onkeyup='deleteit()'>
请参阅正则表达式演示。详情:
(.)
- 捕获组 1 ($1
):除换行符以外的任何字符(\1{2})
- 捕获组 2 ($2
):两个字符与组 1 中捕获的字符相同\1+
- 与第 1 组中捕获的字符相同的字符出现一次或多次。
或者,或者:
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}
- Group 2 值的两次出现
\2+
- 一次或多次出现第 2 组值
请参阅正则表达式演示。
推荐阅读
- kotlin - 为什么要为 ApplicationContext 对象添加注解 @ApplicationContext?
- here-api - 这里批量地理编码 API 停止工作 - HTTP 错误 500
- python - Scrapy Crawler:从页面中抓取列表
- javascript - cubiq - IScroll.js | 我应该在哪个方法生命周期中将自定义事件放入 React JS
- google-play - 我们如何在 Google Play 商店中禁用便利店付款?
- r - 一种计算有效的方法来查找每个 Type 2 行上方和下方的 Type 1 行的 ID?
- javascript - 你可以使用 backdraftjs watchable 让组件完全重新渲染吗?
- verilog - Verilog 给出 x 输出
- qt - 如何从 QListWidgetItem 获取按钮事件
- python - 安装 natcap.invest 时出现的错误如何处理?