![](/img/trans.png)
[英]Javascript Regex Negative Look-ahead (Validating EXACTLY {X} Occurrences and Not More)
[英]regex negative look-ahead javascript
我的代码从文件读取一行,并替换长度为3到18位数字的数字。
问题是我不想匹配字符串DOM:
之后的数字DOM:
冒号后的空白)。
例如:
匹配: tttt 23456789 dkdkd
匹配: 6783456789 dkdkd DOM:
没有匹配项: DOM:23456789 dkdkd
没有匹配项: dhdhd DOM:23456789 dkdkd
没有匹配项: DOM:2789 dkdkd DOM:34567896
我尝试使用否定的前瞻: .*(?!DOM: )[0-9]{3,18}
但这不起作用,请帮助。
您不能这样做,因为在JavaScript中无法使用向后搜索。
解决方法是将功能替换为replace方法:
yourstr = yourstr.replace(/\b(DOM: )?\d{3,18}\b/g, function (m, g) {
return g ? m : 'what you want'; });
在不需要先行(在这里,不使用先行)的情况下,模仿后向的通常方法是通过反转。 反转两个输入字符串,正则表达式模式,然后可以在其中使用先行而不是先行查找 ,然后返回结果:
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>";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.