Как перебрать строку для соответствия регулярному выражению, concat вернуть новую полную строку - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь достичь:

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 голосов
/ 14 ноября 2018

Вам не требуется обратный вызов или какие-либо дополнительные функции, просто используйте replacement pattern, описанный в документации String.replace(), чтобы вставить соответствующую подстроку ($&). Вам также не нужны скобки для группы захвата, если вы не собираетесь делать что-то еще со совпадениями.

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

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

В качестве примечания, в HTML нет тега <bold>, поэтому, если вы пытаетесь создать действительный HTML, вам следует использовать <b>.

0 голосов
/ 14 ноября 2018

Вы можете использовать то же основное регулярное выражение, /'.*?'/gi, с пользовательским обратным вызовом «replacer», переданным методу 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...