Jquery使数组在不区分大小写的indexOf中进行搜索

问题描述 投票:0回答:1

我有这个function,它在键入时检查文本区域是否包含字符串:tag:。如果是,则将其替换为[tag] [/tag]。例如,如果我们键入:b:,它将插入[b] [/b]

这一切都很好,但是即使我们使用大写字母,我也想使它工作。就像键入:B:也会插入[b] [/b](或[B] [/B],实际上无关紧要),但是我尝试过,但这根本不起作用。

$("textarea").on("input",function(e){
        let textarea=$(this);
        let text = textarea.val();
        let target=e.target;
        let position=target.selectionStart;

        let tags=["B","I","U","S","Q",
        "H1","H2","H3","H4","H5","H6",
        "LEFT","CENTER","RIGHT","SUB","SUP",
        "H","HR","CODE","SPOILER","UL","OL","LI"];

        $.each(tags, function(index, tag) {
            tag=tag.toLowerCase();
            let fullTag=":"+tag+":";
            if(textarea.val().toLowerCase().indexOf(fullTag) > -1 ){
                textarea.val(text.replace(fullTag, "["+tag+"]    [/"+tag+"]"));
                target.selectionEnd=position+2;
            }
        });
     });
textarea{
  width:200px;
  height:100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea></textarea>

我觉得答案实际上很简单,我已经搜索了很多,尝试了很多变化,但是我仍然无法弄清楚。因此,我希望您能在此方面为我提供帮助。

jquery replace case-insensitive
1个回答
0
投票

tags数组中,我改为构造一个不区分大小写的正则表达式:

const tags = ["B", "I", "U", "S", "Q",
  "H1", "H2", "H3", "H4", "H5", "H6",
  "LEFT", "CENTER", "RIGHT", "SUB", "SUP",
  "H", "HR", "CODE", "SPOILER", "UL", "OL", "LI"
];
const pattern = new RegExp(tags.map(tag => `:(${tag}):`).join('|'), 'i');
$("textarea").on("input", function(e) {
  let usedIndex = null;
  this.value = this.value.replace(
    pattern,
    (_, tag) => `[${tag}]    [${tag}]`
  );
});
textarea {
  width: 200px;
  height: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea></textarea>
© www.soinside.com 2019 - 2024. All rights reserved.