为文本高亮应用正则表达式

时间:2016-09-13 00:47:28

标签: javascript jquery

我在代码中使用jqxDataAdapter作为jqxWidgets,如下所示:

var dataAdapter = new $.jqx.dataAdapter(source, {

            loadComplete: function (records) {
                var html;
                var color = '#F3F315';

                //Get data
                var records = dataAdapter.records;
                var length = records.length;
                console.log("Checking Length: "+length);// Outputs 5
                for (var i = 0; i < length; i++) {
                console.log("checking Words here: " +records[i].word_text);// Displays five words in the console log one 
                }


                html = "<div style='margin: 10px;'><pre>" + records[1].note_content + "</pre></div>"; //records[1].note_content  shows a long paragraph of text with words to highlight

   // Is this correct way to apply regular expression?
                for (var i = 0; i < length; i++) {

                    html = html.replace(new RegExp(records[i].word_text, 'ig'), '<span style="background-color:' + color + ';">' + records[i].word_text + '</span>');
                }




                console.log("How many span tags you are noticing here?: " + html);
                $("#docContent").html(html);
            },
            loadError: function (xhr, status, error) { },
            beforeLoadComplete: function (records) {

            }
        });

我想知道正则表达式是否正确应用,因为在文档中的每个位置,我注意到需要突出显示的单词被两个<span>标记包围。例如, <span style="background-color:#F3F315;"><span style="background-color:#F3F315;">CAR</span></span>

这是JSFiddle,它会让你知道发生了什么,但它没有上面的代码。单词会突出显示,但我不明白添加两个span标记背后的原因。

1 个答案:

答案 0 :(得分:1)

测试数组中包含小写和大写的单词:

var data = [{
    name: 'CAR'
}, {
    name: 'Car'
}, {
    name: 'Bus'
}, {
    name: 'BUS'
}, {

您的正则表达式不区分大小写,这就是您使用的标记列表中i的内容:

new RegExp(records[i].word_text, 'ig')

这意味着循环将{​​{1}}与CAR匹配(不区分大小写),将其包装在一个范围内,然后将carCar匹配(同样不区分大小写)并且将它包裹在第二个范围内。

您要么通过删除car标记来匹配测试数组中单词的特定大小写,并保留i(全局):

g

或者您想从数组中删除重复的案例条目并保留new RegExp(records[i].word_text, 'g') 标记,因此词语不会多次匹配。