Замена символов в начале и конце определенной строки - PullRequest
0 голосов
/ 03 декабря 2018

Предположим, эта строка:

b*any string here*

В случае, если она существует, я хочу заменить b * в начале на <b>, а * в конце на </b> (не обращая внимания на обратную косую черту Iнужен для выхода на SO-сайт).

Более того, может быть более одного совпадения:

b*any string here* and after that b*string b*.

Эти случаи не должны обрабатываться:

b*foo bar
foo bar*
bb*foo bar* (b is not after a whitespace or beginning of string).

Я дошел до этого:

(?<=b\*)(.*?)(?=\*)

Это дает мне промежуточную строку, но я испытываю трудности в выполнении обмена.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы можете использовать \b(?:b\*)(.+?)(?:\*), поэтому

const result = yourString.replace(/\b(?:b\*)(.+?)(?:\*)/, "<b>$1</b>");

См. Вкладку «Заменить» https://regexr.com/447cq

0 голосов
/ 03 декабря 2018

Используйте String#replace, вам нужно только захватить текст, который вы хотите сохранить:

var result = theString.replace(/\bb\*(.*?)\*/g, "<b>$1</b>");

\b в начале регулярного выражения означает границу слова, так чтоон соответствует только b s, которые не являются частью слова.$1 означает первую захваченную группу (.*?).

Пример:

var str1 = "b*any string here* and after that b*string b*.";

var str2 = `b*foo bar
foo bar*
bb*foo bar* (b is not after a whitespace or beginning of string).`;

console.log(str1.replace(/\bb\*(.*?)\*/g, "<b>$1</b>"));

console.log(str2.replace(/\bb\*(.*?)\*/g, "<b>$1</b>"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...