Я использую регулярное выражение для замены двойного подчеркивания вокруг слова в жирный тэг. Но если в предложении выделено более одного слова, это не сработает. Например:

 "this should be __bold__ and __this__ also".replace(/\__([^*]+)\__/g,"<b>$1</b>");

Я получаю это:

 "this should be <span>bold__ and __this</span> also"

Но хотелось бы получить вот что:

 "this should be <span>bold</span> and <span>this</span> also"

С моим регулярным выражением что-то не так. На данный момент это работает, только если в предложении есть одно жирное слово.

0
userden 28 Авг 2017 в 14:47

3 ответа

Лучший ответ

В Regex квантификаторы + и * являются «жадными», это означает, что они будут использовать как можно больше символов, соответствующих количественному выражению. Вы можете добавить оператор вопросительного знака ?, чтобы превратить «жадную» операцию в ленивую.

Это сделало бы ваше выражение следующим образом:

/\__([^*]+?)\__/g

Для получения дополнительной информации посетите http://www.regular-expressions.info/repeat.html. #lazy

2
Wazner 28 Авг 2017 в 11:54

Как немного другое решение, попробуйте это регулярное выражение:

/__(.*?)__/g

См. Объяснение здесь: https://regex101.com/r/7CVJyd/1

let str = "this should be __bold__ and __this__ also";
str = str.replace(/__(.*?)__/g,"<b>$1</b>");

console.log(str);
0
Khauri 28 Авг 2017 в 12:02

Вы заменяете двойное подчеркивание жирным шрифтом, как __this__ становится <b>this</b>? Ты можешь сделать это,

"this should be __bold__ and __this__ also".replace(/__([^ ]+)__/g,"<b>$1</b>");

Вместо [^*] вы делаете [^ ], чтобы исключить все пробелы.

0
Nicholas 28 Авг 2017 в 11:56