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

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

我的奶牛总是产奶

将返回

“总是”

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

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

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


当前回答

我发现正则表达式是乏味和耗时的语法。因为你已经在使用javascript,所以不使用regex更容易做到以下几点:

const text = 'My cow always gives milk'
const start = `cow`;
const end = `milk`;
const middleText = text.split(start)[1].split(end)[0]
console.log(middleText) // prints "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/

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

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

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

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

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

My cow always gives 
milk

正则表达式101的例子

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

我发现正则表达式是乏味和耗时的语法。因为你已经在使用javascript,所以不使用regex更容易做到以下几点:

const text = 'My cow always gives milk'
const start = `cow`;
const end = `milk`;
const middleText = text.split(start)[1].split(end)[0]
console.log(middleText) // prints "always gives"