我需要匹配一组单词,然后匹配找到的单词中的另一个组。我怎么能用regexp做到这一点?这样做的一般方法是什么?
例如,我需要找到超过8个字母的单词,然后将这些单词拆分为4个字母的组,以便我可以使用javascript插入短划线或任何其他符号。
所以,如果我的文字是:
A full Reference & Help is available in the Library, or watch the video Tutorial.
我的正则表达式必须匹配
['Refe', 'renc', 'avai', 'labl', 'Tuto', 'rial']
我知道我可以选择类似/[a-z]{8,}/ig
之类的长字,然后我需要应用像/[a-z]{3}/ig
之类的东西。那么如何将两者结合起来呢?
如果我只是做/([a-z]{8,})[a-z]{4}/ig
,它并没有给我正确的匹配。
答案 0 :(得分:1)
对于这种特殊情况,您可以使用lookaround:
/(?<=[a-z]{4})[a-z]{4}|[a-z]{4}(?=[a-z]{4})/ig
但是JS没有外观。
一般情况下,您只需匹配8个或更多字母的单词,然后在第二步中对每个匹配项进行自定义处理:
str.replace(/[a-z]{8,}/ig, function(match) {
return match.replace(/[a-z]{4}(?=[a-z])/ig, "$&-"); // or whatever
});