3 回答

TA貢獻1866條經驗 獲得超5個贊
您可以使用正則表達式來測試匹配項。如果字符串匹配 - 逐個替換字母:
let items = [ 'red', 'green', 'yellow', 'blue', 'orange', 'error', 'errorer' ];
let term = 're';
let regex = new RegExp(term.split("").join(".*"));
for (let i = 0; i < items.length; i++) {
let str = items[i];
if (!regex.test(str)) {
print("Item: " + items[i] + "; Doesn't match the term: " + term);
continue;
}
let lastIndex = 0;
for (let letter of term) {
str = str.slice(0, lastIndex) + str.slice(lastIndex).replace(letter, fn_wrapper);
}
print("Item: " + items[i] + "; Matches the term in the characters: " + str);
/***/
function fn_wrapper(letter) {
// 1-st argument of replacer-function == full match (each letter, in this case)
let wrap = "<b>" + letter + "</b>";
lastIndex += wrap.length;
return wrap;
}
}
/***/
function print(msg) {
document.body.insertAdjacentHTML("beforeEnd", "<div>" + msg + "</div>");
}
b { color: red; }

TA貢獻1836條經驗 獲得超13個贊
實現這一點的一種方法是構建一個替換字符串,該字符串與變量中的字符數(以及介于兩者之間的字符數)匹配,以便它可以同時替換與測試正則表達式匹配的所有字符:term
var items = [
'red',
'green',
'grey-green',
'yellow',
'blue',
'orange'
];
var term = 're';
var chars = term.split('');
var regex_text = '(' + chars.join(')(.*?)(') + ')(.*)';
var regex = new RegExp(regex_text);
var replace_string = chars.map((_, i) => '<b>$'+(i*2+1)+'</b>$' + ((i+1)*2)).join('');
for (let i = 0; i < items.length; i++) {
var text = items[i];
document.write("<br>Item: " + text);
if (!regex.test(text)) {
document.write(" doesn't match the term: " + term)
} else {
document.write(" matches the term in the characters: ");
var optionText = text;
var item = optionText.replace(regex, replace_string);
document.write(item);
}
}

TA貢獻1796條經驗 獲得超10個贊
我認為這就是你正在努力實現的目標。您應該使用括號來捕獲使用正則表達式的組。該函數將返回一個包含捕獲組的數組。match
var items = [
'red',
'green',
'yellow',
'blue',
'orange',
];
var term = 're';
var regex_text = '.*(';
regex_text += (term).split('').join('.*');
regex_text += ').*';
var regex = new RegExp(regex_text);
for (let i = 0; i < items.length; i++) {
var text = items[i];
document.write("<br>Item: " + text);
if (!regex.test(text)) {
document.write(" doesn't match the term: " + term)
} else {
document.write(" matches the term in the characters: ");
var optionText = text;
let regexMatch = text.match(regex);
var item = optionText.replace(regexMatch[1], '<b>' + regexMatch[1] +'</b>');
document.write(item);
}
}
添加回答
舉報