Javascript - 替换括号之间的字符串,但括号应该保留

时间:2012-11-06 09:16:32

标签: javascript replace

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

草稿[ 2 ]

要:

草稿[ 3 ]

此正则表达式仅返回草稿 3

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

提前感谢您的帮助

4 个答案:

答案 0 :(得分:11)

你需要更多的东西吗?

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

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

您也可以使用函数代替replace-string。

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]"

答案 1 :(得分:6)

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

编辑:Javascript没有lookbehind。 :C

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

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

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

答案 2 :(得分:2)

您可以将括号添加到替换文本中,如下所示:

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++)+"]";
})

答案 3 :(得分:0)

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

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