用正则表达式匹配字符串,同时忽略某些字符
Match strings with regex while ignoring certain character
我需要在循环中比较两个字符串,同时接受匹配字符串中的某个字符“-”。
function onDatabound(e)
{
var grid = e.sender;
var str = $.trim(grid.value());
var srcWords = str.split(" ");
var records = $(grid.ul).find("li");
for (var i = 0; i < records.length; i++) {
var classes = $(records[i]).find("span i").attr("class");
var newText = records[i].innerText;
for (var j = 0; j < srcWords.length; j++) {
var regex = new RegExp(srcWords[j], 'gi'); //case-insensitive
newText = newText.replace(regex,
function(match) {
return '<strong>' + match + '</strong>';
});
}
$(records[i]).find("span").html("<i class='" + classes + "'></i>" + newText);
}
}
此代码运行完美,但需要最后润色。我需要 replace-function 来接受用户的输入,即使他们不写字符“-”。示例:
innerText: 1111-2222 lorem ipsum dolar 11112222 lorem ipsum dolar
用户输入:11112222
我需要突出显示“1111-2222”和“11112222”,即使用户没有写“-”,反之亦然。
我应该使用正则表达式来解决这个问题吗?或者你们有没有其他方法可供我使用?
当您动态构建正则表达式时,在每个字符之间插入一个可选的连字符是有意义的。
您可以使用
构建模式
var regex = new RegExp(srcWords[j].split("").join("-?"), 'gi');
与escaping special chars:
var regex = new RegExp(srcWords[j].split("").map(function(s) {
return s.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
} ).join("-?"), 'gi');
请注意,您不需要在替换中使用匿名回调方法来替换整个匹配项,您可以使用普通的 $&
字符串反向引用:
newText = newText.replace(regex,'<strong>$&</strong>');
见
JS 演示:
var newText = "1111-2222 and 11112222";
var srcWords = "11112222";
var regex = new RegExp(srcWords.split("").map(function(s) {
return s.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
} ).join("-?"), 'gi');
console.log( newText.replace(regex,'<strong>$&</strong>') );
我需要在循环中比较两个字符串,同时接受匹配字符串中的某个字符“-”。
function onDatabound(e)
{
var grid = e.sender;
var str = $.trim(grid.value());
var srcWords = str.split(" ");
var records = $(grid.ul).find("li");
for (var i = 0; i < records.length; i++) {
var classes = $(records[i]).find("span i").attr("class");
var newText = records[i].innerText;
for (var j = 0; j < srcWords.length; j++) {
var regex = new RegExp(srcWords[j], 'gi'); //case-insensitive
newText = newText.replace(regex,
function(match) {
return '<strong>' + match + '</strong>';
});
}
$(records[i]).find("span").html("<i class='" + classes + "'></i>" + newText);
}
}
此代码运行完美,但需要最后润色。我需要 replace-function 来接受用户的输入,即使他们不写字符“-”。示例:
innerText: 1111-2222 lorem ipsum dolar 11112222 lorem ipsum dolar
用户输入:11112222
我需要突出显示“1111-2222”和“11112222”,即使用户没有写“-”,反之亦然。
我应该使用正则表达式来解决这个问题吗?或者你们有没有其他方法可供我使用?
当您动态构建正则表达式时,在每个字符之间插入一个可选的连字符是有意义的。
您可以使用
构建模式var regex = new RegExp(srcWords[j].split("").join("-?"), 'gi');
与escaping special chars:
var regex = new RegExp(srcWords[j].split("").map(function(s) {
return s.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
} ).join("-?"), 'gi');
请注意,您不需要在替换中使用匿名回调方法来替换整个匹配项,您可以使用普通的 $&
字符串反向引用:
newText = newText.replace(regex,'<strong>$&</strong>');
见
JS 演示:
var newText = "1111-2222 and 11112222";
var srcWords = "11112222";
var regex = new RegExp(srcWords.split("").map(function(s) {
return s.replace(/[-\/\^$*+?.()|[\]{}]/g, '\$&');
} ).join("-?"), 'gi');
console.log( newText.replace(regex,'<strong>$&</strong>') );