簡體   English   中英

正則表達式匹配任何一個詞,但准確的詞

[英]Regex match either word, but the exact word

我正在努力找出一個正則表達式。 我想用破折號替換空格,但前提是以下單詞與classseries匹配。

我嘗試了以下方法:

/\s(?=[^\s]*(class|series)$)/gi

'  E-Class' => ' -E-Class'
'E Class'   => 'E-Class'
' E Class'  => ' E-Class'

上面很接近,但如果已經有一個破折號,它會在前面放一個,這是不應該的。

我相信你應該只匹配課堂或系列之前的空間,而不是之前的每個空間,這樣你就可以嘗試這樣的事情:

/\s(class|series)$/gi

設法弄清楚,這按預期工作:

/\\s(?=class|series)/gi

由於您的正面展望中有[^\\s]* (無空格),因此以classseries結尾的每個單詞(如E-Classabcdefclass )都與您的正面展望相匹配。 如果你只想替換classseries前面的空格,你可以簡單地刪除它並使用/\\s(?=(class|series)$)/gi

下面的正則表達式完成了 OP 所描述的工作......

/\\s(?=class|series)|\\s(\\w+-?)+(?=class|series)/gi .

實際上它是兩個單獨的正則表達式,一個 ( \\s(?=class|series) ) 用於匹配例如' E Class'的模式的明顯簡單情況,另一個 ( \\s(\\w+-?)+(?=class|series) ) 用於更復雜的模式,例如' E-Class'' Ee-ef-fooSeries' ,其中 OP 想要“...用破折號替換空格,但' Ee-ef-fooSeries'是以下單詞[包含] classseries包含但匹配;請參閱我上面的第一條評論)。

正則表達式的匹配結果需要由自定義替換函數處理。 測試用例可能看起來類似於下一個提供的測試用例......

 const testEntries = [ // OP's request. [' E-Class', ' -E-Class'], ['E Class', 'E-Class'], [' E Class', ' E-Class'], // Bonus test. [' Ee-eClass', ' -Ee-eClass'], [' Ee-ef-Class', '-Ee-ef-Class'], [' Ee-ef-fooSeries', ' -Ee-ef-fooSeries'], ]; const regX = (/\\s(?=class|series)|\\s(\\w+-?)+(?=class|series)/gi); function didPassTest([value, expectedValue]) { return ( value.replace(regX, (match) => '-' + match.trim() ) === expectedValue ); } console.log( 'testEntries.every(didPassTest) ?..', testEntries.every(didPassTest) );

暫無
暫無

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

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