我发现了非常相似的帖子,但我不能完全得到我的正则表达式在这里。
我试图写一个正则表达式,它返回一个字符串,这是两个其他字符串之间。例如:我想获取位于字符串“cow”和“milk”之间的字符串。
我的奶牛总是产奶
将返回
“总是”
以下是我到目前为止拼凑的表达方式:
(?=cow).*(?=milk)
然而,这将返回字符串“cow always gives”。
我发现了非常相似的帖子,但我不能完全得到我的正则表达式在这里。
我试图写一个正则表达式,它返回一个字符串,这是两个其他字符串之间。例如:我想获取位于字符串“cow”和“milk”之间的字符串。
我的奶牛总是产奶
将返回
“总是”
以下是我到目前为止拼凑的表达方式:
(?=cow).*(?=milk)
然而,这将返回字符串“cow always gives”。
当前回答
如果数据在多行上,那么您可能必须使用以下方法,
/My cow ([\s\S]*)milk/gm
My cow always gives
milk
正则表达式101的例子
其他回答
如果数据在多行上,那么您可能必须使用以下方法,
/My cow ([\s\S]*)milk/gm
My cow always gives
milk
正则表达式101的例子
我能够得到我需要使用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
我发现正则表达式是乏味和耗时的语法。因为你已经在使用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"
? ?= part)不消耗任何输入。这是一个零宽度断言(边界检查和后视也是如此)。
你需要一个常规的匹配,来消耗牛的部分。为了捕获中间的部分,你使用一个捕获组(只需将你想捕获的部分放在括号内):
cow(.*)milk
根本不需要观察头。
可以使用match()方法在两个字符串之间提取子字符串。试试下面的代码:
var str = "My cow always gives milk";
var subStr = str.match("cow(.*)milk");
console.log(subStr[1]);
输出:
总是给
在这里查看完整的示例:如何在两个字符串之间找到子字符串。