所以我设法修改了一个脚本,用于根据别人写的更简单的字典脚本自动替换特定元素中的文本。但我开始看到冗余代码的积累,我认为可以进一步简化,但不确定如何。
我目前实施的目标:
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
答案 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.