繁体   English   中英

正则表达式否定超前javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM