In our app we have topics which user can create, and each topic must have it's own hashtag (or hashtags hierarchy). We have this kinda Regex for validation:
const REGEX_HASHTAG = /^(#[w]?((\/?)([a-z0-9]+)+)+)(,\s{0,1}#[a-z0-9]?((\/?)([a-z0-9]+)+)+)*$/g;
What i need is for user to be able to create hashtags which have structure like this:
And also users can put comma (and optional whitespace) followed by new hashtag or hashtag hierarchy. When i put too many letters and slash at the end Regex stops working, takes too long to execute. What am i doing wrong?
regexr.com/6hpqo
There are quite a few nested quantifiers and optional parts, which can cause catastrophic backtracking when there is no match.
You could write the pattern as
^#[a-z0-9]+(?:\/[a-z0-9]+)*(?:,\s*#[a-z0-9]+(?:\/[a-z0-9]+)*)*$
^ Start of string#[a-z0-9]+ Match # and 1+ repetitions of the listed characters in the character class(?:\/[a-z0-9]+)* Optionally repeat the / and the same character class(?: Non capture group
,\s* Match a comma and optional whitespace chars#[a-z0-9]+(?:\/[a-z0-9]+)* The same pattern as in the first part)* Close the non capture group and optionally repeat it$ End of string