我发现了非常相似的帖子,但我不能完全得到我的正则表达式在这里。

我试图写一个正则表达式,它返回一个字符串,这是两个其他字符串之间。例如:我想获取位于字符串“cow”和“milk”之间的字符串。

我的奶牛总是产奶

将返回

“总是”

以下是我到目前为止拼凑的表达方式:

(?=cow).*(?=milk)

然而,这将返回字符串“cow always gives”。


当前回答

我能够得到我需要使用Martinho Fernandes的解决方案如下。代码是:

var test = "My cow always gives milk";

var testRE = test.match("cow(.*)milk");
alert(testRE[1]);

您将注意到,我将testRE变量作为一个数组发出警报。这是因为由于某种原因,testRE作为数组返回。输出:

My cow always gives milk

更改为:

always gives

其他回答

? ?= part)不消耗任何输入。这是一个零宽度断言(边界检查和后视也是如此)。

你需要一个常规的匹配,来消耗牛的部分。为了捕获中间的部分,你使用一个捕获组(只需将你想捕获的部分放在括号内):

cow(.*)milk

根本不需要观察头。

只需使用下面的正则表达式:

(?<=My cow\s).*?(?=\smilk)

如果数据在多行上,那么您可能必须使用以下方法,

/My cow ([\s\S]*)milk/gm

My cow always gives 
milk

正则表达式101的例子

可以使用match()方法在两个字符串之间提取子字符串。试试下面的代码:

var str = "My cow always gives milk";
var subStr = str.match("cow(.*)milk");
console.log(subStr[1]);

输出:

总是给

在这里查看完整的示例:如何在两个字符串之间找到子字符串。

你可以使用解构来只关注你感兴趣的部分。

所以你可以这样做:

let str = "我的奶牛总是产奶"; 让[结果]= str.match (/ \ bcow \ s + (. * ?) \ \ b / s +牛奶)| | []; console.log(结果);

通过这种方式,您可以忽略第一部分(完整的匹配),而只获得捕获组的匹配。如果您不确定是否会有匹配,那么||[]的添加可能会很有趣。在这种情况下,match将返回不能被解构的null,所以我们在这种情况下返回[],然后result将为null。

额外的\b确保了周围的单词“cow”和“milk”是真正独立的单词(例如,不是“milky”)。还需要使用\s+来避免匹配包含一些外间距。