Как исправить это регулярное выражение, чтобы оно заменяло * правильно (между словами)? - PullRequest
0 голосов
/ 03 октября 2018

Я практикую регулярные выражения.Я думал о создании регулярного выражения, которое превращает * в <em>, точно так же как с Markdown:

el = el.replace(/\*\b/g, '<em>')
el = el.replace(/\b\*|(\.|\,|\?|\!|\*|---|\.\.\.\s)\*/g, '$1</em>')

Это работает в большинстве случаев.Однако, если вы примените это регулярное выражение к этому:

 Chicken teriy<em>ai</em>ki, r<em>ai</em>men noodles, spaghetti a la moneg<em>ai</em>sque. And wait for me, often falling asleep.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Это должно сработать, оно будет заключать символы между * знаками в теги em, ПРИМЕЧАНИЕ: это применяется глобально к предоставленной строке.

 const str = "something that has words surrounded with * signs"
 str.replace(/\*(\w+)\*/g, "<em>$1</em>")
0 голосов
/ 03 октября 2018

Вы можете объединить две ветви во втором регулярном выражении, поскольку обе заканчиваются шаблоном \*, например (\b|\.|,|\?|!|\*|---|\.{3}\s)\* (вы можете даже объединить \.|,|\?|!|\* альтернативы с одним символом в [.,?!*]), а затем использовать

var s = "Chicken teriy*ai*ki, r*ai*men noodles, spaghetti a la moneg*ai*sque.";
console.log(
  s.replace(/\*\b([^]*?)(\b|[.,?!*]|---|\.{3}\s)\*/g, '<em>$1$2</em>') 
)

Подробности

  • \*\b - *, за которым следует слово char (буква, цифраили _)
  • ([^]*?) - Группа 1: любые 0+ символов, как можно меньше (могут быть заменены на [\s\S] / [\d\D] / [\w\W], если вам требуется больше переносимости), до самого левого вхождения
  • (\b|[.,?!*]|---|\.{3}\s) - граница слова, ., ,, ?, !, *, ---, ... + пробел
  • \* - * char.
0 голосов
/ 03 октября 2018

Использовать регулярное выражение \*([\w ^?.]*?)\*

Заменить на <em>$1<\em>

el = el.replace(/\*([\w ^?.]*?)\*/g, '<em>$1<\em>')

Regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...