2017-07-28 106 views
1

在下面的字符串的支架:替换匹配的标准

(my name is zeeze :) and I am very happy ;)) 

我需要更换所有的)__BR__是由正则表达式满足图案的一部分:

[8|:|;|\*]{1}[-c^;\*]?\) 

参考: Regex playground

我不能代替结尾),因为它不是模式的一部分。

有什么办法可以做到这一点?

回答

1

你可以做到这一点的回调方法:

var s = "(my name is zeeze :) and I am very happy ;))"; 
 
console.log(
 
    s.replace(/[8:;*][-c^;*]?\)/g, function($0) { 
 
    return $0.replace(/\)/g, "__BR__") 
 
    }) 
 
) 
 
// => (my name is zeeze :__BR__ and I am very happy ;__BR__)

注意|字符类[8|:|;|\*]内作为文字|管道符号进行处理,因此,我认为这是一个人错误。 {1}是多余的,因为一个原子默认匹配一次。在字符类中没有必要转义字符*,它在那里被解析为文字星号。