如何使用正则表达式实现仅括号外文本转为首字母大写格式
实现方案
可以通过一条正则结合替换回调实现,核心思路是优先匹配括号包裹的内容原样保留,其余连续英文字符转成首字母大写其余小写的格式,代码如下:
function _changeWordToTitle(str) { // 正则优先匹配括号包裹的内容,未匹配到的才进入字母分组 return str.replace(/\([^)]+\)|([a-zA-Z]+)/g, (match, group1) => { // 匹配到括号内容时分组1为undefined,直接返回原内容 if (!group1) return match // 普通单词转标题格式 return group1[0].toUpperCase() + group1.slice(1).toLowerCase() }) }
测试效果
输入:DOTA (UMA), MIAN (MIAN ISLAND), SOUTH TAKAK (PO) (JAB)
输出:Dota (UMA), Mian (MIAN ISLAND), South Takak (PO) (JAB)
原代码问题说明
你之前的实现把所有括号内容全部提取后统一拼在末尾,直接丢失了原有文本中括号的位置和分隔逗号,自然不符合预期。
内容的提问来源于stack exchange,提问作者niepl
相关产品推荐
相关产品推荐

