JavaScript正则如何将括号内的空格替换为连字符?
问题原因
你遇到的报错是因为绝大多数正则引擎不支持可变长度的正向后视断言,你在后视里写的\w+属于长度不确定的匹配规则,因此不符合语法要求。
最优解决方案
优先使用「先匹配括号整体、再二次替换内部内容」的方案,兼容性最强、逻辑清晰,所有支持正则替换回调的语言都可以实现,以JavaScript为例:
const str = 'these are the (1st 2nd and last) places' const result = str.replace(/\(([^)]+)\)/g, (match, innerContent) => { // 对括号内的内容单独替换空格为横杠 return `(${innerContent.replace(/\s/g, '-')})` }) console.log(result) // 输出:these are the (1st-2nd-and-last) places
其中外层正则/\(([^)]+)\)/g的逻辑:
\(匹配左括号([^)]+)捕获所有非右括号的字符,即括号内的全部内容\)匹配右括号g全局匹配所有括号片段,支持同时处理字符串中多组括号的场景
可选兼容方案(仅特定引擎可用)
如果你使用的正则引擎支持可变长度后视(比如Python的regex第三方库、最新版V8引擎),也可以直接用下面的正则匹配括号内的空格:
/(?<=\([^)]*)\s(?=[^)]*\))/g
该方案兼容性差,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者punkish
相关产品推荐
相关产品推荐

