Javascript正则表达式如何获取字符串中两个单词之间的所有出现

时间:2014-05-11 14:53:40

标签: javascript regex string

我使用以下函数来获取字符串中两个单词之间的字符串:

function findStringBetween(str,first,last){
  var r = new RegExp(first+'.*(.*)'+last,'gm');
  var a = str.match(r);     
  return a;
}

但我无法全面了解可能的发现。

例如,如果像这样的句子(str)是这样的话:

“里面有很多单词的句子。里面的句子很短。还有一些句子来填补我的这个例子。”

我明白了:

var found = findStringBetween(str, 'The', 'inside');
>> ["The sentence which has a lot of words inside. The sentence short inside"]

我想得到的是两个词“The”和“inside”之间的所有发现。示例结果将是:

>> ["The sentence which has a lot of words inside",
>> "The sentence short inside"]

这可以通过正则表达式吗?如果不是,我该怎么做才能快速找到?

由于

1 个答案:

答案 0 :(得分:5)

是的,这是可能的。问题是默认情况下正则表达式字符“*”(和“+”)是“贪婪的”,这意味着它将与最长的匹配一起使用。你想要最短的匹配,所以通过添加“?”使其“懒惰”在它之后,像这样:

function findStringBetween(str, first, last) {
    var r = new RegExp(first + '(.*?)' + last, 'gm');
    return str.match(r);
}