【发布时间】:2012-10-26 05:15:14
【问题描述】:
我想替换字符串中的字符,例如
草稿 [2]
收件人:
草稿 [3]
这个正则表达式只返回草稿3:
str.replace(/\[(.+?)\]/g, 3)
提前感谢您的帮助
【问题讨论】:
标签: javascript replace
我想替换字符串中的字符,例如
草稿 [2]
收件人:
草稿 [3]
这个正则表达式只返回草稿3:
str.replace(/\[(.+?)\]/g, 3)
提前感谢您的帮助
【问题讨论】:
标签: javascript replace
你需要比下面更多的东西吗?
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]"
【讨论】:
使用零宽度断言而不是实际匹配括号。
编辑:Javascript 没有lookbehind。 :c
作为一般解决方案,您可以捕获周围的内容并使用反向引用将其放回替换字符串中。
str.replace(/(\[).+?(\])/g, "$13$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++)+"]";
})
【讨论】:
如果您需要更多此类功能,则可以使用 方法借用技巧创建函数。
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
【讨论】: