[英]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.