I try to match/get all repetitions in a string. This is what I've done so far:
var str = 'abcabc123123';
var REPEATED_CHARS_REGEX = /(.).*\1/gi;
console.log( str.match(REPEATED_CHARS_REGEX) ); // => ['abca', '1231']
As you can see the matching result is ['abca', '1231']
, but I excpect to get ['abc', '123']
. Any ideas to accomplish that?
2nd question:
Another thing I excpect, is to make it possible to change the duration how often a char needs to be in the string to get matched...
For example if the string is abcabcabc
and the repetation-time is set to 2
it should result in ['abcabc']
. If set to 3
it should be ['abc']
.
Update
A non-RegExp
solution is perfectly alright!
The answer above returns more duplicates than there actually are. The second for loop causes the problem and is unnecessary. Try this:
This solution may be used if you don't want to use regex:
Well, I think falsetru had a good idea with a zero-width look-ahead.
This allows it to match just the initial substring while ensuring at least 1 repetition follows.
For M42's follow-up example, it could be modified with a
.*?
to allow for gaps between repetitions.Then, to find where the repetition starts with multiple uses together, a quantifier (
{n}
) can be added for the capture group:Or, to match just the initial with a number of repetitions following, add the quantifier within the look-ahead.
It can also match a minimum number of repetitions with a range quantifier without a max --
{2,}