簡體   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