function replaceKeys(inputString, keys){

    for (var i = 0; i < keys.length; i++) {
                var t = keys[i];
                if (t) inputString= inputString.replace(new RegExp(t, 'gi'), '<strong>' + t + '</strong>');
            }
            return s;
}


使用上面的javascript方法,我已经尝试根据“键”或字符串部分的列表将给定字符串中的所有文本加粗。

输入示例:
keys = [“ man”,“ str”]
inputString =“ strong man”
预期的输出:
坚强的人

不幸的是,输出也替换了强标签的“ str”部分。意味着输出变为

strstrong>老兄。

是否有正则表达式或其他方法,以便我可以忽略字符串中的html标签,因此它没有像这样的怪异行为?

最佳答案

您可以通过定义一个占位符而不是直接使用<strong>标签来做到这一点:

function replaceKeys(inputString, keys){
    var placeholder = '!!';
    var s = inputString.replace(new RegExp(/strong>/gi),placeholder);
    for (var i = 0; i < keys.length; i++) {
                var t = keys[i];
                if (t) s = s.replace(new RegExp(t, 'gi'), '<' + placeholder + t + '</' + placeholder );
            }
            return s.replace(new RegExp(placeholder,'g'),'strong>');
}
replaceKeys("strong man",["man", "str"]);

07-24 09:50
查看更多