我在代码中使用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标记背后的原因。
答案 0 :(得分:1)
测试数组中包含小写和大写的单词:
var data = [{
name: 'CAR'
}, {
name: 'Car'
}, {
name: 'Bus'
}, {
name: 'BUS'
}, {
您的正则表达式不区分大小写,这就是您使用的标记列表中i
的内容:
new RegExp(records[i].word_text, 'ig')
这意味着循环将{{1}}与CAR
匹配(不区分大小写),将其包装在一个范围内,然后将car
与Car
匹配(同样不区分大小写)并且将它包裹在第二个范围内。
您要么通过删除car
标记来匹配测试数组中单词的特定大小写,并保留i
(全局):
g
或者您想从数组中删除重复的案例条目并保留new RegExp(records[i].word_text, 'g')
标记,因此词语不会多次匹配。