【问题标题】:Replace specific symbols between curly braces替换花括号之间的特定符号
【发布时间】:2018-07-27 18:46:29
【问题描述】:

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

我正在尝试使用 javascript 的 string.replace 方法和正则表达式来删除花括号中的一些特定字符 (! * ? : % . ^)

我想要的输出是

“这个 $.%^ 是我的{正确字符串}”

基本上我只是在尝试匹配某些符号,如果它们在括号内。

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

【问题讨论】:

  • 到目前为止,您尝试了什么?例如。如果不是“内部花括号”部分,您将如何删除特定字符?您将如何尝试将文本放入花括号内?请注意,我的假设是,大括号永远不会嵌套 - 例如字符串“{{}}”将无效。如果这个假设不正确,那也很有趣。
  • .replace(/(\.|\^|*|\?|:|!|%|\$)/g, "") 如果括号不是约束

标签: javascript regex string


【解决方案1】:

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, "")
  )
);

重要的是,永远不能有任何嵌套的大括号。前面提到的代码不适用于例如“{{}}”,因为嵌套结构在一般情况下不能用正则表达式解析。

【讨论】:

    【解决方案2】:

    这里是替换所选特殊字符的示例代码

        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);

    【讨论】:

      猜你喜欢
      • 2015-11-09
      • 1970-01-01
      • 2016-07-31
      • 2016-04-19
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多