直接正则应该做不到,但是可以先把括号里面的“|”替换成别的字符,如“@”,最后再替换回来
let s = 'email|url(name1|name2)|test(name3)'
s.replace(/((.*?)|(.*?))/ig, `$1@$2').split('|').map((item) => {
return item.replace('@', '|')
})
如果是里面有多个括号或者竖线思路是一样的,我举得例子是替换“|”, 你可以替换“(.*?)”,包括多个层括号,你可以遍历一层一层的替换处理,然后再遍历替换回去,如:
email|url(name(name|name))
=> email|url(name@-1-@)
=> email|url@-2-@
创建个临时对象存的是
{
'@-1-@': (name|name)
'@-2-@': (name@-1-@)
}
等分割后,再遍历替换回来
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…