1,一串字符串里面至少有三个6,并且不考虑大小写
/^.{3}(.*[6]){3}/i
^.{3}: Skip the first three characters
()是group,找完一次,会从上次结束的地方开始找
{3}是至少匹配三次的意思,如下图:
.*是匹配所有其他不是6的(空格,数字,字母,啥的)
[6]是只是匹配6这个数字
[6]和.*是可以替换顺序的,因为在正则表达式里面[6]的优先级高于.*,如下图:
Regex in Practice: check and highlight
function formatNumber (number, regex, highlight) {
// 格式化号码。举个例子,把"18305960745"格式化成"183 0596 0745"
function format(number) {
return number.substr(0, 3) + " " + number.substr(3, 4) + " " + number.substr(7, 4);
}
var formattedNumber = format(number);
if (isBlank(regex)) {
return format(formattedNumber);
}
if (regex.includes("|")) {
//如果是全部特征
// 高亮正则数组
var highlightArr = highlight.split("|");
// 搜索正则数组
var regexArr = regex.split("|");
// 对各个搜索正则进行匹配,如果匹配到就使用高亮正则进行replace
regexArr.some(function (regexItem, index) {
var regExp = new RegExp(regexItem);
// 是否匹配
var isMatched = regExp.test(formattedNumber);
if (isMatched) {
// 如果匹配,那么就使用高亮正则进行高亮
var highlightItem = highlightArr[index];
if (regexItem.startsWith("^.{3}")) {
// 没有包括前三位;
formattedNumber = formattedNumber.substring(0, 3) + formattedNumber.substring(3).replace(new RegExp(highlightItem, "g"), function (match) {
return "<strong>" + match + "</strong>";
});
} else {
// 包括前三位;
formattedNumber = formattedNumber.replace(new RegExp(highlightItem, "g"), function (match) {
return "<strong>" + match + "</strong>";
});
}
}
// 返回匹配结果
return isMatched;
});
// 返回高亮过的号码
return formattedNumber;
}
// 如果不是全部特征,使用高亮正则就行了
if (regex.startsWith("^.{3}")) {
// 没有包括前三位;
return formattedNumber = formattedNumber.substring(0, 3) + formattedNumber.substring(3).replace(new RegExp(highlight, "g"), function (match) {
return "<strong>" + match + "</strong>";
});
}
// 包括前三位;
return formattedNumber = formattedNumber.replace(new RegExp(highlight, "g"), function (match) {
return "<strong>" + match + "</strong>";
});
}