簡體   English   中英

在RegExp中處理不同的匹配項

[英]Processing different matches in a RegExp

我想構建一個RegExp ,它匹配第一個單詞的第一個字母或非首字母的第一個字母,但我希望能夠區分這兩種匹配,以便我可以處理非首字匹配不同。

例如,我想總是將第一個單詞和除“bam”不是第一個單詞的實例之外的所有其他單詞大寫。

我怎樣才能做到這一點?

function titleCase(title) {
    return title.replace(/\b(.)/g, (str, p1) => {         
         return p1.toUpperCase();
    });
}

titleCase('foo bar bam'); // Foo Bar Bam - but I want Foo Bar bam

您可以將多個正則表達式拼湊在一起,如/(option 1)|(option 2)/g

然后你的回調將收到以下任何一個:

callback(match, option1, undefined, offset, subject) // left side matched
callback(match, undefined, option2, offset, subject) // right side matched

使用此功能,您的回調可能如下所示:

(str, p1, p2) => {
    if( p1) ...
    else if( p2) ...
}

這是titleCase一個實現,它將大寫字符串中每個類似字的元素的第一個字母。

function titleCase(title) {
  return title.replace(/\b(\w)(.*?)\b/g, (match, g1, g2) => `${g1.toUpperCase()}${g2}`)
}
  1. 在此示例中, /\\b(\\w)(.*?)\\b/g \\b\\w )(。*?) \\b /\\b(\\w)(.*?)\\b/g將匹配單詞邊界( \\b ),后跟單詞字符( \\w )。 我們使用分組(\\w)捕獲第一個字母,並在replace函數中用作g1
  2. 然后我們使用組(.*?)捕獲單詞的剩余部分,該組在替換器中使用g2引用。
  3. 最后,模板字符串用於大寫第一個字母組,並將結果與​​單詞的剩余匹配連接起來。

暫無
暫無

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

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