Skip to content Skip to sidebar Skip to footer

How To Fix This Regex So It Replaces * Properly (between Words)?

I'm practicing regex. I thought of creating regex that turn * into , just like with Markdown: el = el.replace(/\*\b/g, '') el = el.replace(/\b\*|(\.|\,|\?|\!|\

Solution 1:

You can merge the two branches in your second regex since both end with \* pattern, like (\b|\.|,|\?|!|\*|---|\.{3}\s)\* (you may even merge the \.|,|\?|!|\* single char alternatives into [.,?!*]), and then use

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>') 
)

Details

  • \*\b - a * that is followed with a word char (letter, digit or _)
  • ([^]*?) - Group 1: any 0+ chars, as few as possible (may be replaced with a [\s\S] / [\d\D] / [\w\W] if you need more portability), up to the leftmost occurrence of
  • (\b|[.,?!*]|---|\.{3}\s) - word boundary, ., ,, ?, !, *, ---, ... + whitespace
  • \* - a * char.

Solution 2:

This should work, it will wrap the characters between * signs into em tags, NOTE: this applies globally on the string provided.

const str = "something that has words surrounded with * signs"
 str.replace(/\*(\w+)\*/g, "<em>$1</em>")

Solution 3:

Use regex \*([\w ^?.]*?)\*

Replace with <em>$1<\em>

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

Regex

Post a Comment for "How To Fix This Regex So It Replaces * Properly (between Words)?"