如何在单词的开头和结尾替换字符?

时间:2018-09-08 09:05:48

标签: javascript regex

例如:

var string = This is a *piece* of text.

我可以做到:

string.replace(/\*/g, <em>)

但是,我会得到这个:<em>piece<em>。我想得到的是:<em>piece</em>

如何修改此代码,以便我可以在单词的开头和结尾处检测到*字符?

2 个答案:

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