[英]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}`)
}
/\\b(\\w)(.*?)\\b/g
\\b
( \\w
)(。*?) \\b
/\\b(\\w)(.*?)\\b/g
將匹配單詞邊界( \\b
),后跟單詞字符( \\w
)。 我們使用分組(\\w)
捕獲第一個字母,並在replace函數中用作g1
。 (.*?)
捕獲單詞的剩余部分,該組在替換器中使用g2
引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.