我发现了非常相似的帖子,但我不能完全得到我的正则表达式在这里。
我试图写一个正则表达式,它返回一个字符串,这是两个其他字符串之间。例如:我想获取位于字符串“cow”和“milk”之间的字符串。
我的奶牛总是产奶
将返回
“总是”
以下是我到目前为止拼凑的表达方式:
(?=cow).*(?=milk)
然而,这将返回字符串“cow always gives”。
我发现了非常相似的帖子,但我不能完全得到我的正则表达式在这里。
我试图写一个正则表达式,它返回一个字符串,这是两个其他字符串之间。例如:我想获取位于字符串“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
其他回答
我能够得到我需要使用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"
只需使用下面的正则表达式:
(?<=My cow\s).*?(?=\smilk)
我选择的答案不适合我……嗯……
只要在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+来避免匹配包含一些外间距。