正则表达式以获取Javascript中两个字符串之间的字符串

我发现了非常类似的帖子,但我在这里找不到我的正则表达式。

我正在尝试编写一个正则表达式,它返回一个字符串,该字符串位于另外两个字符串之间。例如:我想得到驻留在字符串“牛”和“牛奶”之间的字符串。

我的牛总是喂牛奶

会回来

“总是给予”

到目前为止,我拼凑起来的表达方式如下:

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

不过,这会返回“牛总是给”的字符串。

正则表达式以获取Javascript中两个字符串之间的字符串

慕村9548890
浏览 1335回答 3
3回答

森栏

正则表达式以获取Javascript中两个字符串之间的字符串在绝大多数情况下,最完整的解决方案是使用捕获组带着懒惰点匹配模式..然而,一个点.在JS regex中,不匹配换行字符,所以,在100%情况下,[^]或[\s\S]/[\d\D]/[\w\W]构造。ECMAScript 2018和新的兼容解决方案在JS环境中支持ECMAScript 2018,&nbsp;s修饰符允许.匹配任何字符,包括换行字符,regex引擎支持可变长度的查找。所以,您可以使用正则表达式,例如var&nbsp;result&nbsp;=&nbsp;s.match(/(?<=cow\s+).*?(?=\s+milk)/gs);&nbsp;//&nbsp;Returns&nbsp;multiple&nbsp;matches&nbsp;if&nbsp;any//&nbsp;Orvar&nbsp;result&nbsp;=&nbsp;s.match(/(?<=cow\s*). *?(?=\s*milk)/gs);&nbsp;//&nbsp;Same&nbsp;but&nbsp;whitespaces&nbsp;are&nbsp;optional在这两种情况下,都会检查当前的位置。cow之后的任何1/0或更多的空白空间cow,则任何0+字符尽可能少地被匹配和消耗(=添加到匹配值),然后milk被选中(在此子字符串之前使用任何1/0或更多的空格)。场景1:单行输入所有JS环境都支持此方案和以下所有其他方案。参见答案底部的用法示例。cow&nbsp;(.*?)&nbsp;milkcow首先找到一个空格,然后找到除换行字符以外的任何0+字符,尽可能少使用*?是一个惰性量词,被捕获到组1中,然后用milk必须跟随(并且它们是匹配的,并且消耗掉)。场景2:多行输入cow&nbsp;([\s\S]*?)&nbsp;milk这里,cow首先匹配一个空格,然后将任意0+字符尽可能少地匹配并捕获到第1组,然后使用milk是匹配的。场景3:重叠匹配如果你有一个字符串>>>15 text>>>67 text2>>>你需要两场比赛>>>+number+whitespace和>>>,你不能用/>>>\d+\s(.*?)>>>/g因为这将只找到一个匹配的事实,因为>>>以前67已经消耗掉找到第一次匹配。您可以使用正前瞻检查文本是否存在,而不实际“吞食”它(即附加到比赛中):/>>>\d+\s(.*?)(?=>>>)/g见在线regex演示屈服text1和text2作为第一组的内容。亦见如何获得字符串的所有可能的重叠匹配.业绩考虑懒惰点匹配模式(.*?)如果给出很长的输入,regex模式可能会减慢脚本的执行速度。在很多情况下,展开环技术在很大程度上是有帮助的。试图抓住两者之间的一切cow和milk从…"Their\ncow\ngives\nmore\nmilk",我们看到,我们只需要匹配所有的行,而不是从milk因此,而不是cow\n([\s\S]*?)\nmilk我们可以使用:/cow\n(.*(?:\n(?!milk$).*)*)\nmilk/gm见regex演示(如果可以的话)\r\n,使用/cow\r?\n(.*(?:\r?\n(?!milk$).*)*)\r?\nmilk/gm)。使用这个小测试字符串,性能增益是可以忽略不计的,但是对于非常大的文本,您会感觉到差异(特别是如果行长,换行不多)。JavaScript中的示例regex用法://Single/First match expected: use no global modifier and access match[1]console.log("My cow always gives milk".match(/cow (.*?) milk/)[1]);// Multiple matches: get multiple matches with a global modifier and&nbsp;// trim the results if length of leading/trailing delimiters is knownvar s = "My cow always gives milk, thier cow also gives milk";console.log(s.match(/cow (.*?) milk/g).map(function(x) {return x.substr(4,x.length-9);}));//or use RegExp#exec inside a loop to collect all the Group 1 contentsvar result = [], m, rx = /cow (.*?) milk/g;while ((m=rx.exec(s)) !== null) {&nbsp; result.push(m[1]);}console.log(result);
打开App,查看更多内容
随时随地看视频慕课网APP