2017-05-31 58 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次,并且可能搜索文本中没有的单词! –