我有一个字符串“此$。%^是我的{正确。!字符串*?:%^}”
我正在尝试将javascript的string.replace方法与正则表达式一起使用,以删除花括号内的一些特定字符(!*?:%。^ )
我想要的输出是
“这$。%^是我的{correctstring}”
从本质上讲,我仅尝试将某些符号括在方括号内。
如果在这种情况下regex和.replace()不足,那么正确的方法是什么?
答案 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, "")
)
);
重要的是,绝对不能有任何嵌套的花括号。前面提到的代码不适用于例如“ {{}}”,因为在通常情况下,嵌套结构无法使用正则表达式进行解析。