例如,如果字符串x = "\\aa\\aa\\a"
结果应该看起来像"\a[a]\a[a]\a"
由于javascript没有看后面,我发现很难实现这一点。 :(
答案 0 :(得分:4)
'\\aa\\aa\\a'.replace(/(\\)?(.)/g, function($0, $1, $2){
return $1?$1+$2:'['+$2+']';
}); // "\a[a]\a[a]\a"
我们先走过字符串而不是字符(\\)?(.)
。
$1
如果存在,则为\\
;如果已被忽略,则为undefined
。 $2
抓取(.)
部分,例如任何角色。[^\\]
。 因此,我们只是分析$1
并决定我们要选择的替代品:
$1+$2
保持输入不变或'['+$2+']'
包装输入字符。
'\\aabc\\aa\\a'.replace(/(\\)?(([acl9#])|.)/g, function($0, $1, $2, $3){
return $1 ? // have we escaped character?
$1+$2: // yes
($3? // have we unescaped [acl9#] ?
'['+$3+']':
$2 // some other unescaped character
);
});// "\a[a]b[c]\a[a]\a"
此外,您可以使用$0
参数进行恢复:
// /(\\)?(?:([acl9#])|.)/g
// (?: ) is uncaptured group
return $1 ? $0 : ($2 ? '['+$2+']' : $0);