如何遍历正则表达式匹配的字符串,concat返回新的完整字符串

时间:2018-11-13 21:02:32

标签: javascript regex dictionary match

我正在努力实现:

const finalStr = "team='Core', team='Mechanics'"
//loop through string, get single quotes, add <bold>'Core'</bold>
//I want to return the string: 
"team=<bold>'Core'</bold>, team=<bold>'Mechanics'</bold>"

我尝试过的方法,但显然是错误的...无法将我的头缠住:

const finalStr = this.state.finalString
const newFinal = finalStr.match(/'(.*?)'/g).map(item => {
    item = item.replace(item, '<b>' + item + '</b>')
      return item;
    });

2 个答案:

答案 0 :(得分:3)

您不需要回调或任何其他函数,只需使用String.replace()文档中描述的replacement pattern插入匹配的子字符串($&)。除非您打算对匹配项进行其他操作,否则您也不需要捕获组的括号。

const finalStr = "team='Core', team='Mechanics'"

const newFinal = finalStr.replace(/'.*?'/g, '<bold>$&</bold>')
console.log(newFinal)

请注意,HTML中没有<bold>标签,因此,如果您尝试创建有效的HTML,则应使用<b>

答案 1 :(得分:1)

您可以使用相同的基本正则表达式/'.*?'/gi,并将自定义的“替换”回调传递给string#replace方法来解决此问题:

const input = "team='Core', team='Mechanics'"

const output = input.replace(/'.*?'/gi, function(matchStr) {

  // Wrap each match in the resulting string with <bold /> tags 
  return '<bold>' + matchStr + '</bold>';
});

console.log(output);