我们说我有以下字符串:
var str = "I like barbeque at dawn";
我想要用空格分隔的所有单词对。这可以通过以下正则表达式实现:
var regex = /[a-zA-Z]+ [a-zA-Z]+/g;
str.match(regex);
这导致:
["I like", "barbeque at"]
但如果我想要对的所有排列怎么办?正则表达式失败,因为它只匹配任何给定的单词onces。例如,这就是我想要的:
["I like", "like barbeque", "barbeque at", "at dawn"]
我知道我可以使用递归回溯模式来生成排列。正则表达式是否有能力为我创建这些类型的对?
答案 0 :(得分:0)
答案 1 :(得分:0)
这个正则表达式会这样做:
(?=\b([a-zA-Z]+ [a-zA-Z]+))
请参阅demo
<强>解释强>
(?=...)
以便不测试输入字符串中的每个位置。因此,我们仍将“移动”整个字符串而不消耗任何字符\b
将强制正则表达式引擎查找后续子模式返回的匹配项之间的边界([a-zA-Z]+ [a-zA-Z]+)
是捕获组,将收集双字短语。示例代码:
var re = /(?=\b([a-zA-Z]+ [a-zA-Z]+))/g;
var str = 'i like barbeque at dawn';
while ((m = re.exec(str)) !== null) {
document.getElementById("res").innerHTML += m[1] + "<br/>";
}
答案 2 :(得分:0)
您可以执行以下操作:
(\w+)\s+(?=(\w+))
并使用($1, $2)
请参阅DEMO
Input: i like barbeque at dawn
Output: (i, like) (like, barbeque) (barbeque, at) (at, dawn)
答案 3 :(得分:0)
您可以使用前瞻:
$('#clicky').click(function(e){
$("#click").addClass("transition").delay(1000).queue(function(){
$('#blurmewithtransition').addClass("blur").dequeue();
});
});