我有一个字符串
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 : 1
到element : 2
提取子字符串(包含或排除它现在并不重要)
我使用了以下代码,但它仍然无效:
var regexStr = /element : 1\s*\n(.*)element : 2/
var rx = new RegExp(regexStr, "i")
console.log(string.match(rx)); //null
答案 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]
是“任何一个空白字符或不是空白字符的字符”......因此是“任何字符”。