正则表达式基于相同的单词创建多个单词片段

时间:2015-05-05 19:07:24

标签: javascript regex permutation

我们说我有以下字符串:

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"]

我知道我可以使用递归回溯模式来生成排列。正则表达式是否有能力为我创建这些类型的对?

4 个答案:

答案 0 :(得分:0)

使用带有捕获的前瞻,允许重叠匹配:

(\w+)\s+(?=(\w+))

Demo

如果您想要在一组中捕获两个,则替代:

(?=(\b\w+\s+\b\w+))

Demo

答案 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();

});

});