最小化jQuery以通过字典查找和替换多个单词?

时间:2017-09-29 02:11:01

标签: javascript jquery

所以我设法修改了一个脚本,用于根据别人写的更简单的字典脚本自动替换特定元素中的文本。但我开始看到冗余代码的积累,我认为可以进一步简化,但不确定如何。

我目前实施的目标:

var dictionary= {
    " jquery ":" #jQuery ",
    " jQuery ":" #jQuery ", 
    " JQuery ":" #jQuery ",

    " jQuery1 ":" #jQuery ",
    " jQuery2 ":" #jQuery ", 
    " jQuery3 ":" #jQuery ",
};

jQuery(document).ready(function() {
    setTimeout(function() {
$("#status").each( function(){
    for( var ptrn in dictionary){
        $(this).text( $(this).text().replace(new RegExp(ptrn ,"g"), dictionary[ptrn] ) );
    }
});
}, 500);
});

我想要的是简化组合3个单词来检测它,而没有多个“#jQuery”,类似于以下或类似的东西。 “jQuery1”将被认为是与“jQuery5”相对应的东西:

" jQuery1 "," jQuery2 "," jQuery3 ":" #jQuery ",

这个修改过的jQuery脚本基于这个: https://stackoverflow.com/a/9908925/2038928

3 个答案:

答案 0 :(得分:0)

替换文本的脚本使用正则表达式,因此字典的键可以是正则表达式。

例如,如果您使正则表达式不区分大小写,则此字典会将您的问题中的字典与仅一个条目相加:

var dictionary= {
    " jquery\\d? ":" #jQuery "
};

您还可以匹配不同的字符串,使用单个条目指定每个字符串,如下所示:

var dictionary= {
    "(text1|text2|text3)":" #jQuery "
};

要使正则表达式不区分大小写,请更改

new RegExp(ptrn, "g")

为:

new RegExp(ptrn, "ig")

答案 1 :(得分:0)

您可以使用RegExp /jquery[\d\s]+/i来匹配问题

中对象的所有属性
let res = str.replace(/jquery[\d\s]+/i, "#jQuery ");

答案 2 :(得分:0)

从用户处获取此威胁并略微修改:https://stackoverflow.com/a/46480860/8589517

$(this).text( $(this).text().replace(new RegExp(ptrn ,"g","ig"), dictionary1[ptrn] ) );

" test":" #test", "(10 20|30 40)":"#jQuery",

结果:

10 20 10 25 30 40 50 test 至: #jQuery 10 25 #jQuery 50 #test

另一个例子:

来自:AI is used by many social media platforms for censorship.

使用:"(AI | ai | aI |artificial intelligence)":" #ArtificialIntelligence ",

收件人:#ArtificialIntelligence is used by many social media platforms for censorship.