Reputation: 161
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/
Upvotes: 2
Views: 2130
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