【问题标题】:RegEx match numbers which have n repeating digits at the endRegEx 匹配末尾有 n 个重复数字的数字
【发布时间】:2018-06-30 09:48:16
【问题描述】:

我想在 Javascript 中匹配末尾有精确 n 个重复数字的数字。但是,我的正则表达式最后匹配 n 位或多于 n 位数字,我似乎无法解决这个问题。
即 n=3,匹配这些: 12333 222 1233334333

不匹配这些: 11 12344 122233 123333

我的正则表达式(不工作):
(\d)\1{2}$ [^\1](\d)\1{2}$ (\d){3}(?!\1)$

【问题讨论】:

标签: javascript regex


【解决方案1】:

试试这个 - 在重复数字开始之前匹配数字,对所述数字使用负前瞻,然后匹配 3 个重复数字:

const strs = [
'12333',
'222',
'1233334333',
'11',
'12344',
'123333'];
const re = /(^|(\d)(?!\2))(\d)\3{2}$/;
strs.forEach(str => {
  if (re.test(str)) console.log('pass ' + str);
});

【讨论】:

  • 是的,它很棒。我从字面上从来没有在这部分正则表达式中使用 \n 的东西,只是为了替换。我认为这就像en.wikipedia.org/wiki/Candle_problem :如果有人告诉你可以这样使用它们,它看起来很简单,但如果不是,你可能永远也想不通。
【解决方案2】:

虽然这个表达式几乎可以解决您需要的问题(它会给出 4 次或更多重复的误报),也许这也可以修复......我建议使用 no 或不仅使用正则表达式来解决这个问题。可能是 [0-9]{n} 和精确的重复检查,并在字符串上使用反向循环。

let re= /1{3}$|2{3}$|3{3}$|4{3}$|5{3}$|6{3}$|7{3}$|8{3}$|9{3}$|0{3}$/;

var div = document.getElementById('out');

div.innerHTML += "12333".match(re)+" -- <br/>"
div.innerHTML += "222".match(re) +" -- <br/>"
div.innerHTML += "1233334333".match(re) +" -- <br/>"

// Not match these:
div.innerHTML += "11".match(re) +" -- <br/>"
div.innerHTML += "12344".match(re) +" -- <br/>"
div.innerHTML += "122233".match(re)+" -- <br/>"
div.innerHTML += "123333".match(re)+" -- <br/>"
&lt;div id=out&gt;&lt;/div&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多