[英]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>');
});
例如,假設keywordsClone
有Fire
並且transcript
有fire
。 那么它應該被選中。 ie true
如果keywordsClone
有Fire
並且transcript
有firee
那么它應該是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.