我需要正则表达式的帮助。
使用 javascript 我正在查看文本文件的每一行,并且我想将&strong> [0-9] {6,9} 的任何匹配替换为& #39; *',但是,我不想替换前缀 100 的数字。因此, 1110022 之类的数字应该被替换(匹配),但 1004567 不应该(不匹配)。
我需要一个能够解决问题的表达式(只是匹配部分)。我不能使用^或$因为数字可以出现在行的中间。
我尝试过(?!100)[0-9] {6,9} ,但它没有用。
更多示例:
不匹配:10012345
比赛:1045677
不匹配:
1004567
不匹配:num =" 10034567"测试
仅匹配行中的中间数字:num =" 10048876" 1200476,1008888
由于
答案 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。