2016-02-14 63 views
2

我的代碼從文件讀取一行並替換長度爲3到18位數的數字。正則表達式否定前瞻javascript

事情是我不想匹配字符串DOM:(冒號後的空白)後面的數字。

例如:

匹配: TTTT 23456789 dkdkd

匹配: 6783456789 dkdkd DOM:

不匹配: DOM:23456789 dkdkd

不符合: dhdhd DOM:23456789 dkdkd

敵不過: DOM:2789 dkdkd DOM:34567896

我一直在使用負前瞻嘗試:.*(?!DOM:)[0-9]{3,18}

但它不能正常工作,請幫幫我。

+1

您正在尋找負回顧後,哪些JS還沒有。 – Bergi

回答

2

因爲lookbehind在JavaScript中不可用,所以無法使用。

的解決方法是使用一個函數作爲替換爲替換方法:

yourstr = yourstr.replace(/\b(DOM:)?\d{3,18}\b/g, function (m, g) { 
    return g ? m : 'what you want'; }); 
+0

謝謝,我會做一些類似於你的建議。 – Asaf

1

的通常的方法來模擬天生一個反向預搜索,其中先行是沒有必要的(在這裏,不使用先行),則通過逆轉。您既反向輸入字符串,正則表達式模式,你可以這樣使用前瞻而不是回顧後,然後將結果:

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>";

+0

感謝您的回覆 – Asaf