我正在编写Web应用程序的一部分,我在其中替换文本中的单词。我使用了Replace函数,但是我替换了我不想要的文本(下面举一个例子)。现在我已经实现了一个函数,通过将文本分成单词,但是当我想要替换文本中的两个连续单词时。显然,它不起作用。
第一个选项:
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),如果它有多个元素,创建一个时间变量并检查连续的元素,但我猜它会影响性能而我不知道如果有更好更容易的选择。
有人能想到更好的选择吗?
谢谢!
答案 0 :(得分:2)
据我了解,您只想匹配整个单词而不是子字符串。
解决方案是为正则表达式添加单词边界:
str.replace(/\brobot\b/gi, 'Robota');
这只会匹配整个“机器人”字样。