簡體   English   中英

RegEx-精確的單詞匹配但不區分大小寫

[英]RegEx-exact word match but case insensitive

你能告訴我如何獲得精確的單詞匹配但不區分大小寫嗎? 我試過這個。 但它不起作用。 請問有什么線索嗎?

forEach(keywordsClone, (k) => {

 const regExpression = new RegExp('^' + `${k}` + '$', 'i'); //exact match and case insensitive
    
 transcript = transcript.replace(regExpression, '<span class="color-dark-red">$1</span>');
      });

例如,假設keywordsCloneFire並且transcriptfire 那么它應該被選中。 ie true如果keywordsCloneFire並且transcriptfiree那么它應該是false。

這工作正常。 但它沒有選擇確切的單詞匹配。

const regExpression = new RegExp(`(${k})`, 'ig');

更新

keywordsClone=['nothing showing', 'nothing show']

成績單

“他會在現場單層住宅,沒有任何跡象表明你必須調查,嗯嗯。”

當我使用

    forEach(keywordsClone, (k) => {
   const regExpression = new RegExp(`(${k})`, 'ig'); //exact match and case insensitive
    
   transcript = transcript.replace(regExpression, '<span class="color-dark-red">$&</span>');
      });

然后它像這樣中斷:

    "He's gonna be on scene single story residence, <span class="color-dark-
red"><span class="color-dark-red">nothing show</span>ing</span> you have to 
investigate, mm hmm."

但我只需要這樣:

     "He's gonna be on scene single story residence, <span class="color-
dark-red">nothing showing</span> you have to 
    investigate, mm hmm."

我使用Lodash forEach: https://lodash.com/docs/4.17.15#forEach

我將使用單詞邊界( \b )來匹配你的東西。 另外,我正在使用 vanillaJS,並且使用 reduce 而不是forEach ,但是該部分應該很容易適應您的lodash版本。

單詞邊界的關鍵在於它將匹配空格(空格、換行符等),但不匹配<>之類的字符 - 這是前一次將匹配的內容。 所以這個簡單的版本有效。

如果您想進行其他替換(例如,您新創建的內部跨度仍包含空格),您可以調整正則表達式以匹配該事物,前提是它不在“跨度深紅色”事物之類的范圍內. 但這是另一個問題。

 const getText = () => document.querySelector('#my-text').innerHTML; const wordMatches = ['nothing showing', 'nothing show']; const createReplacement = (snippet, regex) => { // snippet here is something that's not within a span already, but matching your thing const re = new RegExp(`\\b${regex}\\b`) return snippet.replace(re, '<span class="color-dark-red">$&</span>') } const app = () => { const text = getText(); const replacement = wordMatches.reduce( (snippet, word) => createReplacement(snippet, word), // in each loop, run this and pass result to next word text); // this is the initial snippet document.querySelector('#replacements').innerHTML = replacement; } app();
 #replacements.color-dark-red { color: tomato; }
 <span id="my-text">"He's gonna be on scene single story residence, nothing showing you have to investigate, mm hmm."</span> <div id="replacements"> </div>

嘗試如下。 它應該工作。 我猜k是一個字符串。

const regExpression = new RegExp(k, 'ig');

暫無
暫無

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

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