2

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

2
  • the second parameter to string.replace can be a function for you to write custom logic. Commented Aug 2, 2021 at 18:42
  • any option to do it with regex? Commented Aug 2, 2021 at 18:43

1 Answer 1

2

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.
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.