例如:
var string = This is a *piece* of text.
我可以做到:
string.replace(/\*/g, <em>)
但是,我会得到这个:<em>piece<em>
。我想得到的是:<em>piece</em>
。
如何修改此代码,以便我可以在单词的开头和结尾处检测到*
字符?
答案 0 :(得分:4)
您可以使用以下捕获组:
var string = 'This is a *piece* of text.'
var r = string.replace(/\*([^\*]+)\*/, (m, m1) =>
`<em>${m1}</em>`)
console.log(r)
更好的是,您可以随时随地使用任何绑定字符来构建正则表达式
const parseChar = x => node => str => {
const re = new RegExp(`\\${x}([^\\${x}]+)\\${x}`)
return str.replace(re, (_, m) =>
`<${node}>${m}</${node}>`
)
}
var string = 'This is a *piece* of text.'
var r = parseChar('*')('em')(string)
console.log(r)
答案 1 :(得分:4)
您可以将replace与第一个捕获组一起使用,在该捕获组中,您不会使用否定的字符类([^*]+)
捕获*,并使用g
全局标志来替换所有捕获组。
\*([^*]+)\*
那将匹配
\*
匹配* ([^*]+)
捕获一个或多个不匹配*的组,否则您可能会得到<em></em>
\*
匹配*
var string = 'This is a *piece* of text and *piece*';
string = string.replace(/\*([^*]+)\*/g, "<em>$1</em>");
console.log(string);