亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式突出顯示字符串中的匹配字符

使用正則表達式突出顯示字符串中的匹配字符

江戶川亂折騰 2022-09-29 10:47:00
我試圖突出顯示正則表達式的匹配字符,目前我有這個: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;      var item = optionText.replace(regex, '<b>$1</b>');      document.write(item);   }}但結果不是我所期望的,我要去的(沒有空格):斷續器g r e en黃色藍o r ang e
查看完整描述

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; }


查看完整回答
反對 回復 2022-09-29
?
開心每一天1111

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);

  }

}


查看完整回答
反對 回復 2022-09-29
?
白衣染霜花

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);

    }

}


查看完整回答
反對 回復 2022-09-29
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號