我尝试匹配/获取字符串中的所有重复项。到目前为止,这是我所做的:
var str = 'abcabc123123';
var REPEATED_CHARS_REGEX = /(.).*\1/gi;
console.log( str.match(REPEATED_CHARS_REGEX) ); // => ['abca', '1231']
如您所见,匹配结果是['abca', '1231']
,但我期望得到['abc', '123']
。有什么想法可以做到吗?
第二个问题:
我期望的另一件事是,它可以更改持续时间,以便在字符串中匹配字符的频率得以提高...
例如,如果字符串为,abcabcabc
并且将repetation-time设置为2
,则结果应为['abcabc']
。如果设置为3
它应该是['abc']
。
更新
一个非RegExp
解决方案是完全可以的!
好吧,我认为falsetru有一个很好的主意,其零宽度预见功能。
'abcabc123123'.match(/(.+)(?=\1)/g)
// ["abc", "123"]
这样可以确保仅匹配初始子字符串,同时确保至少重复1次。
对于M42的后续示例,可以使用对其进行修改,.*?
以允许重复之间存在间隙。
'abc123ab12'.match(/(.+)(?=.*?\1)/g)
// ["ab", "12"]
然后,要查找重复一起开始多次使用的位置,{n}
可以为捕获组添加一个量词():
'abcabc1234abc'.match(/(.+){2}(?=.*?\1)/g)
// ["abcabc"]
或者,要仅使首字母与随后的许多重复匹配,请在前瞻中添加量词。
'abc123ab12ab'.match(/(.+)(?=(.*?\1){2})/g)
// ["ab"]
它还可以使用范围量词匹配最小重复次数,而没有最大数量- {2,}
'abcd1234ab12cd34bcd234'.match(/(.+)(?=(.*?\1){2,})/g)
// ["b", "cd", "2", "34"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句