替换文字中的单词

时间:2017-05-31 12:00:12

标签: javascript regex performance

我正在编写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),如果它有多个元素,创建一个时间变量并检查连续的元素,但我猜它会影响性能而我不知道如果有更好更容易的选择。

有人能想到更好的选择吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

据我了解,您只想匹配整个单词而不是子字符串。

解决方案是为正则表达式添加单词边界:

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

这只会匹配整个“机器人”字样。