【问题标题】:Javascript - replace string between brackets, but the brackets should stayJavascript - 替换括号之间的字符串,但括号应该保留
【发布时间】:2012-10-26 05:15:14
【问题描述】:

我想替换字符串中的字符,例如

草稿 [2]

收件人:

草稿 [3]

这个正则表达式只返回草稿3

str.replace(/\[(.+?)\]/g, 3)

提前感谢您的帮助

【问题讨论】:

    标签: javascript replace


    【解决方案1】:

    你需要比下面更多的东西吗?

     var num=2 // parse this from drafts [2]
     num++;
     var newstr=str.replace(/\[(.+?)\]/g, "["+num+"]")
    

    或者括号可以更改为 {} 每个输入?

    你也可以给出一个函数来代替替换字符串。

    var str = "Drafts [2]";
    
    function replacer(match, p1, p2, p3, offset, string) {
      return p1 + (1+parseInt(p2)) + p3;
    }
    var newstr=str.replace(/([\[(])(.+?)([\])])/g, replacer);
    alert(newstr); // alerts "Drafts [3]"
    

    【讨论】:

      【解决方案2】:

      使用零宽度断言而不是实际匹配括号。

      编辑:Javascript 没有lookbehind。 :c

      作为一般解决方案,您可以捕获周围的内容并使用反向引用将其放回替换字符串中。

      str.replace(/(\[).+?(\])/g, "$13$2")
      

      或者,您可以在替换中包含硬编码的括号。

      【讨论】:

      • 我收到“SyntaxError: invalid quantifier” - 错误指向第一个斜杠
      • @PeterO。啊,是的,确实如此。 Forgot Javascript 没有lookbehind。已更新。
      • 是的,js不支持lookbehind。它只支持前瞻。
      • 如果你的正则表达式总是有 $1==[ & $2==],为什么不硬编码呢?
      • 这是一个更通用的解决方案。例如,如果周围的内容是“aiuhsadas”和“asdasdas”,那么硬编码这些值会很不方便。
      【解决方案3】:

      您可以像这样将括号添加到替换文本中:

      str.replace(/\[(.+?)\]/g, "["+3+"]")
      

      编辑:如果您需要对括号中的数字做任何事情,您可以使用函数而不是替换文本:

      str.replace(/\[(.+?)\]/g, function(string, first){
        // string is the full result of the regex "[2]"
        //first is the number 2 from "draft [2]"
        return "["+(first++)+"]";
      })
      

      【讨论】:

        【解决方案4】:

        如果您需要更多此类功能,则可以使用 方法借用技巧创建函数。

        const args = {
            source: "Lorem [ipsum] dolor [sit] amet",
            prefix: `<i style="background-color:yellow">`,
            suffix: '</i>',
            global: true,
            deleteBrackets: true
        }
        
        const bracketsToTags = (args) => {
            const { source, prefix, suffix, global = true, deleteBrackets = false } = args;
            const reg = /\[(.+?)\]/;
            source.replace = ''.replace;
            return source.replace(new RegExp(reg, global ? 'g': ''), 
                                     (withBrackets, withoutBrackets) => (
                `${prefix}${deleteBrackets ? withoutBrackets: withBrackets}${suffix}`
            ))
        }
        

        所以,运行函数

        bracketsToTags(args)
        

        你会得到

        "Lorem <i style="background-color:yellow">ipsum</i> dolor <i style="background-color:yellow">sit</i> amet"
        

        PS:对 React 使用“React HTML Parser” - link

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-02
          • 1970-01-01
          • 2015-02-26
          • 1970-01-01
          • 1970-01-01
          • 2015-04-16
          相关资源
          最近更新 更多