stoner
stoner

Reputation: 161

How to replace words in string by regex pattern with exception

There is a regex pattern:

[a-zA-Z0-9]+.?(com|net)

I use it to replace the words in strings with this function:

const formatString = (str) => {
   const regex = new RegExp("[a-zA-Z0-9]+.?(com|net)","gi");
   return str.replace(regex, "*")
}

function execution examples:

formatString("google.com something else.net") // returns: "* something *"
formatString("google.com") // returns: "*"
formatString("something") // returns: "something"

but in some cases, I need to make an exception word so that it is not replaced.

Example:

exception word is google (or google.com)

formatString("google.com something else.net") // should returns: "google.com something *"

I tried to do it with negative lookahead using this pattern: (?!google)[a-zA-Z0-9]+.?(com|net), but it does not work, it only ignores the first letter of the word.

Match information from https://regex101.com/

match information from regex101 dot com

Upvotes: 2

Views: 2130

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626728

You can use

const regex = /\b(?!google\b)[a-zA-Z0-9]+\.(?:com|net)\b/gi;

Details:

  • \b - word boundary
  • (?!google\b) - a negative lookahead that fails the match if there is google as a whole word immediately to the right of the current position
  • [a-zA-Z0-9]+ - one or more ASCII letters or digits
  • \. - a dot
  • (?:com|net) - a non-capturing group matching either com or net
  • \b - a wor boundary.

Upvotes: 2

Related Questions