2017-05-31 60 views
0

我正在編寫Web應用程序的一部分,在該應用程序中我從文本中替換單詞。我使用了替換功能,但我替換了我不想要的文本(下面放置一個示例)。現在我已經實現了將文本拆分爲單詞的功能,但是當我想要替換文本中的兩個連續單詞時。顯然,它不起作用。替換文本中的單詞

第一個選項:

var str = "iRobot Roomba balbalblablbalbla"; 

str.replace(/robot/gi, 'Robota'); 

output -> iRobota Roomba ........(fail !) 

二碼:

var patterns: [ 
    { 
     match: 'robot', 
     replacement: 'Robota' 
    },{ 
     match: 'ipad', 
     replacement: 'tablet' 
    }, 
    ......... more 
]; 

var temp = str.split(' '); 

var newStr = temp.map(function(el) { 

    patterns.forEach(function(item) { 

     if(el.search(new RegExp('^'+item.match+'$', 'gi')) > -1) { 

      el = item.replacement; 

      return el; 
     } 
    }); 

    return el; 
}); 

return newStr.join(' '); 

利用這最後的代碼不替代雙字的文本,作爲檢查,只會讓一個。我一直在尋找互聯網尋找解決方案,我還沒有發現任何類似的東西。

我只是碰巧做了一個單詞拆分來檢查(item.match),如果它有多個元素,創建一個時間變量,並檢查連續的元素,但我想它會影響性能,我不知道是否有更好更容易的選擇。

任何人都可以想到更好的選擇嗎?

謝謝!

回答

2

據我所知,你只想匹配整個單詞而不是子字符串。

的解決方案是將字邊界添加到您的正則表達式:

str.replace(/\brobot\b/gi, 'Robota'); 

這將只匹配整個「機器人」的話。

+0

正常工作。幾分鐘前,我嘗試了一些類似的東西,因爲我在StackOverflow中看到了一些建議,但沒有用\\ b轉義。謝謝 !! ;-) – Anto

+0

它的工作原理,但效率不高。設想一下n個模式的大字典也是一樣的:你需要將整個字符串解析n次,並且可能搜索文本中沒有的單詞! –