我的代码从文件中读取一行并替换长度为3到18位的数字。
问题是我不想匹配字符串DOM:
后面的数字(冒号后面的空格)。
例如:
匹配: tttt 23456789 dkdkd
匹配: 6783456789 dkdkd DOM:
不匹配: DOM:23456789 dkdkd
不匹配: dhdhd DOM:23456789 dkdkd
不匹配: DOM:2789 dkdkd DOM:34567896
我尝试过使用否定预测:.*(?!DOM: )[0-9]{3,18}
但它不起作用,请帮助。
答案 0 :(得分:2)
由于javascript中无法使用lookbehind,因此无法使用。
解决方法是使用替换方法替换函数:
yourstr = yourstr.replace(/\b(DOM: )?\d{3,18}\b/g, function (m, g) {
return g ? m : 'what you want'; });
答案 1 :(得分:1)
一种模仿后视镜的常用方法,即不需要前瞻(这里,未使用前瞻),是通过逆转。你反转输入字符串,正则表达式模式,你可以使用 lookahead 而不是lookbehind,然后结果:
function revStr(str) {
return str.split('').reverse().join('');
}
var s = ["tttt 23456789 dkdkd", "6783456789 dkdkd DOM:",
"DOM: 23456789 dkdkd", "dhdhd DOM: 23456789 dkdkd", "DOM: 2789 dkdkd DOM: 34567896"];
var rex = /\b[0-9]{3,18}\b(?!\s*:MOD\b)/g; // Regex for matching reversed numbers
var results = []; // Array for results
s.forEach(function(t) { // Test each string
m = revStr(t).match(rex); // Collect all matches
if (m) { // If we have a match
m.forEach(function(h) {
results.push(revStr(h)); // Reverse each match value and add
});
}
}
);
document.body.innerHTML = "<pre>" + JSON.stringify(results, 0, 4) + "</pre>";