簡體   English   中英

在元素內部文本的正則表達式匹配周圍添加 HTML

[英]Add HTML Around Regex Matches From Element Inner Text

我有一個帶有一段內部文本的 span 元素。 我需要通過正則表達式來定位該文本的特定部分,並將我的匹配項轉換為具有 class 屬性 class="hightlight-yellow" 和名為 my-custom-attribute="hello" 的自定義屬性的 span 元素。

這是我的輸入和預期 output...

輸入

<span class="message"> This is some text $HIGH:LOW $LOW:HIGH </span>

Output

<span> This is some text <span class="highlight-yellow" my-custom-attribute="hello">$HIGH:LOW</span> <span class="highlight-yellow" my-custom-attribute="hello">$LOW:HIGH</span></span>

我該如何更換? 這是我當前收集匹配項的代碼

   function handle()
{
    let element = document.getElementsByClassName('message')
    let text = element[0].innerText;
    let regex = /([^=])\$([A-Za-z:]{1,})/g;
    let matches = text.match(regex);

    if(matches != null)
    {
        for(let i = 0; i < matches.length; ++i)
        {
            // TODO takes matches are replace with spans with attributes.
        }
    }
}

您可以簡單地在String.prototype.replace()中使用您的正則表達式,並將其替換為包裝您的捕獲組的所需標記。

我已經刪除了第一個捕獲組,因為它與之前的空白空格匹配,這不是您想要的。 最重要的是,我建議使用querySelectorAll並遍歷節點列表以將來證明您的設置。

如果您真的只想.message匹配選擇器 .message 的第一個元素,那也是可能的。

注意:您的 output 似乎也從原始<span>元素中刪除了message class ,但我不確定這是拼寫錯誤還是故意的。

請參閱下面的概念驗證:

 function handle() { const regex = /\$([A-Za-z:]{1,})/g; document.querySelectorAll('.message').forEach(el => { el.innerHTML = el.innerText.replace(regex, '<span class="highlight-yellow" my-custom-attribute="hello">$1</span>'); }); } handle();
 span.highlight-yellow { background-color: yellow; }
 <span class="message">This is some text $HIGH:LOW $LOW:HIGH</span>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM