替换花括号之间的特定符号

时间:2018-07-27 18:46:29

标签: javascript regex string

我有一个字符串“此$。%^是我的{正确。!字符串*?:%^}”

我正在尝试将javascript的string.replace方法与正则表达式一起使用,以删除花括号内的一些特定字符(!*?:%。^

我想要的输出是

“这$。%^是我的{correctstring}”

从本质上讲,我仅尝试将某些符号括在方括号内。

如果在这种情况下regex和.replace()不足,那么正确的方法是什么?

2 个答案:

答案 0 :(得分:0)

此处是替换所选特殊字符的示例代码

    var str = "This $.%^ is my {correct.!string*?:%^}";
    // extract the interested text block
    var strArr = str.replace(/[{}]/g,'**myUniqueSubstring**').split('**myUniqueSubstring**');

//console.log(strArr[1].replace(/[(!*?:%.^)]/g, ''));
// matching all the occurrences of selected special characters
var finalString = strArr[0] + "{" + strArr[1].replace(/[(!*?:%.^)]/g, '') + "}";

console.log(finalString);

答案 1 :(得分:0)

String.prototype.replace可选地具有替换功能:

console.log("This $.%^ is my {correct.!string*?:%^}"
  .replace(
    /\{([^}]*)\}/g,
    (fullMatch, group1) => `{${group1.replace(/\.|\^|\*|\?|:|!|%|\$/g, "")}}`
  )
);

请注意,如果您使用新的lookbehind(许多实现尚不支持),甚至可以使用:

//Works e.g. in the current chrome version already:
console.log("This $.%^ is my {correct.!string*?:%^}"
  .replace(
    /(?<=\{)[^}]*(?=\})/g,
    fullMatch => fullMatch.replace(/\.|\^|\*|\?|:|!|%|\$/g, "")
  )
);

重要的是,绝对不能有任何嵌套的花括号。前面提到的代码不适用于例如“ {{}}”,因为在通常情况下,嵌套结构无法使用正则表达式进行解析。