匹配没有前缀的数字

时间:2016-01-26 12:33:37

标签: javascript regex prefix

我需要正则表达式的帮助。

使用 javascript 我正在查看文本文件的每一行,并且我想将&strong> [0-9] {6,9} 的任何匹配替换为& #39; *',但是,我不想替换前缀 100 的数字。因此, 1110022 之类的数字应该被替换(匹配),但 1004567 不应该(不匹配)。

我需要一个能够解决问题的表达式(只是匹配部分)。我不能使用^或$因为数字可以出现在行的中间。

我尝试过(?!100)[0-9] {6,9} ,但它没有用。

更多示例:

  

不匹配:10012345

     

比赛:1045677

     

不匹配:

     

1004567

     

不匹配:num =" 10034567"测试

     

仅匹配行中的中间数字:num =" 10048876" 1200476,1008888

由于

1 个答案:

答案 0 :(得分:2)

您需要使用前导字边界来检查数字是否以某个特定数字序列开头:

\b(?!100)\d{6,9}

请参阅regex demo

此处,100会在字边界后面检查,而不是中。

如果您只需要用一个星号替换匹配项,只需使用"*"作为替换字符串(请参阅下面的代码段)。

var re = /\b(?!100)\d{6,9}/g; 
var str = 'Don\'t match: 10012345\n\nMatch: 1045677\n\nDon\'t match:\n\n1004567\n\nDon\'t match: num="10034567" test\n\nMatch just the middle number in the line: num="10048876" 1200476, 1008888';
document.getElementById("r").innerHTML = "<pre>" + str.replace(re, '*') + "</pre>";
<div id="r"/>

或者,如果您需要用*替换每个数字,则需要在替换中使用回调函数:

String.prototype.repeat = function (n, d) {
    return --n ? this + (d || '') + this.repeat(n, d) : '' + this
};

var re = /\b(?!100)\d{6,9}/g; 
var str = '123456789012 \nDon\'t match: 10012345\n\nMatch: 1045677\n\nDon\'t match:\n\n1004567\n\nDon\'t match: num="10034567" test\n\nMatch just the middle number in the line: num="10048876" 1200476, 1008888';
document.getElementById("r").innerHTML = "<pre>" + str.replace(re, function(m) { return "*".repeat(m.length); }) + "</pre>";
<div id="r"/>

repeat函数借用BitOfUniverse's answer