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

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

我的奶牛总是产奶

将返回

“总是”

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

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

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


当前回答

下面是一个正则表达式,它将抓取奶牛和牛奶之间的内容(没有前导/尾随空格):

srctext = "My cow always gives milk.";
var re = /(.*cow\s+)(.*)(\s+milk.*)/;
var newtext = srctext.replace(re, "$2");

示例:http://jsfiddle.net/entropo/tkP74/

其他回答

Task

在两个字符串之间提取子字符串(不包括这两个字符串)

解决方案

let allText = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum";
let textBefore = "five centuries,";
let textAfter = "electronic typesetting";
var regExp = new RegExp(`(?<=${textBefore}\\s)(.+?)(?=\\s+${textAfter})`, "g");
var results = regExp.exec(allText);
if (results && results.length > 1) {
    console.log(results[0]);
}

我选择的答案不适合我……嗯……

只要在cow后面和/或milk前面添加空格,就可以从“always gives”中删除空格

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

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

所以你可以这样做:

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

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

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

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

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

cow(.*)milk

根本不需要观察头。

您需要捕获。* 你可以(但不必)使。*非贪婪 真的没有必要向前看。 > /牛(. * ?)牛奶/我。exec(“我的奶牛总是产奶”); [“奶牛总是出奶”,“总是出奶”]