如何使用正则表达式在特殊字符串中查找子字符串?

时间:2017-12-15 21:33:23

标签: javascript regex

我有一个字符串

element : 1

Description
This is the description of item 1
___________________

element : 2

Description
This is the description of item 2
______________________

这是它的代码:

var string = "element : 1\n\nDescription\nThis is the description of item 1\n_________________\n\nelement : 2\n\nDescription\nThis is the description of item 2\n____________________________"

我希望能够使用正则表达式从element : 1element : 2提取子字符串(包含或排除它现在并不重要)

我使用了以下代码,但它仍然无效:

var regexStr = /element : 1\s*\n(.*)element : 2/
var rx = new RegExp(regexStr, "i")

console.log(string.match(rx));  //null

2 个答案:

答案 0 :(得分:3)

您可以使用

^element(?:(?!^element)[\s\S])+

使用多线修改器,请参阅a demo on regex101.com

<小时/> 细分说明:

^element         # match element at the start of a line
(?:              
    (?!^element) # neg. lookahead, making sure there's no element at the start of the line
    [\s\S]       # ANY character, including newlines...
)+               # ...as often as possible

答案 1 :(得分:1)

在JavaScript中,.每个字符都不匹配。它匹配除行终止符之外的任何单个字符:\n\r\u2028\u2029

您可以改为[\s\S]

/element : 1\s*\n([\s\S]*)element : 2/

作为参考,\s表示任何空格字符,\S表示相反的空格字符。因此[\s\S]是“任何一个空白字符或不是空白字符的字符”......因此是“任何字符”。