替换符合条件的括号

时间:2017-07-28 12:40:04

标签: javascript regex string pattern-matching

在以下字符串中:

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

我需要将所有)替换为__BR__,这是正则表达式所满足的模式的一部分:

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

参考:Regex playground

我无法替换结尾),因为它不是模式的一部分。

有什么方法可以达到这个目的?

1 个答案:

答案 0 :(得分: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}是多余的,因为默认情况下原子只匹配一次。没有必要在字符类中转义* char,它在那里被解析为文字星号符号。