使用javascript中的正则表达式获取内容

使用javascript中的正则表达式获取内容,javascript,regex,Javascript,Regex,如何使用正则表达式获取“head”段落(第一部分)文本?这是来自txt文件。您可以使用[\s\s]+::content匹配所有内容,直到::content: ::head line 1 line 2 line 3 ::content content 1 content 2 content 3 您可以使用[\s\s]+::content匹配所有内容,直到::content: ::head line 1 line 2 line 3 ::content content 1 content

如何使用正则表达式获取“head”段落(第一部分)文本?这是来自txt文件。

您可以使用
[\s\s]+::content
匹配所有内容,直到
::content

::head
line 1
line 2
line 3

::content
content 1
content 2
content 3   

您可以使用
[\s\s]+::content
匹配所有内容,直到
::content

::head
line 1
line 2
line 3

::content
content 1
content 2
content 3   

不幸的是,以下代码在javascript中不起作用,因为:。所以我们必须稍微调整一下。文件中的换行符可以在javascript字符串中找到,如
\n
。在windows中,这包括
\r
,但在linux中不包括,因此我们的
\s*
变得更加重要,因为我们不使用行尾字符(
$
)。我还注意到,您不需要专门收集其他行,因为断线将被忽略

const text = ...
const matches = text.match(/^([\s\S]+)::content/m)
const content = matches[1]
这在Chrome的测试中有效,所以它应该适合您的需要


这有点花哨,但如果将其与许多类似属性结合使用,则应该适合

/(::head[^]*?)\n\s*\n/m
请注意,您需要
/m
多行标志

在这里,它是根据您的样本数据进行测试的

首先,我们检查
::head
数据。这就是我们开始使用
()
在组中收集信息的地方。然后,我们使用
*
查找任何内容,但我们使用lazy
标志进行查找。然后我们用
$
找到行的结尾,用行的开头
^
查找更多包含数据的行,然后是任何
*?
然后是行的结尾
$
由于多行标志,这将捕获多行,因此使用延迟匹配
非常重要,这样我们就不会捕获太多数据。然后我们寻找一条空线。通常你只需要
^$
就可以了,但我想确保如果有人在节之间的行上粘了一个多余的空格或标签,这会起作用,所以我们使用
\s*
来获取空格。
*
允许它找到可接受的“0或更多”空格。请注意,我们没有在组
()
中包含空行,因为这不是您关心的数据


对于regex的进一步阅读,我建议在这里学习我所知道的关于regex的所有知识。

不幸的是,以下内容在javascript中不起作用,原因是:。所以我们必须稍微调整一下。文件中的换行符可以在javascript字符串中找到,如
\n
。在windows中,这包括
\r
,但在linux中不包括,因此我们的
\s*
变得更加重要,因为我们不使用行尾字符(
$
)。我还注意到,您不需要专门收集其他行,因为断线将被忽略

const text = ...
const matches = text.match(/^([\s\S]+)::content/m)
const content = matches[1]
这在Chrome的测试中有效,所以它应该适合您的需要


这有点花哨,但如果将其与许多类似属性结合使用,则应该适合

/(::head[^]*?)\n\s*\n/m
请注意,您需要
/m
多行标志

在这里,它是根据您的样本数据进行测试的

首先,我们检查
::head
数据。这就是我们开始使用
()
在组中收集信息的地方。然后,我们使用
*
查找任何内容,但我们使用lazy
标志进行查找。然后我们用
$
找到行的结尾,用行的开头
^
查找更多包含数据的行,然后是任何
*?
然后是行的结尾
$
由于多行标志,这将捕获多行,因此使用延迟匹配
非常重要,这样我们就不会捕获太多数据。然后我们寻找一条空线。通常你只需要
^$
就可以了,但我想确保如果有人在节之间的行上粘了一个多余的空格或标签,这会起作用,所以我们使用
\s*
来获取空格。
*
允许它找到可接受的“0或更多”空格。请注意,我们没有在组
()
中包含空行,因为这不是您关心的数据



对于regex的进一步阅读,我建议在这里我学习了关于regex的所有知识。

indexOf
子字符串
您尝试了什么?事实上,你可以不使用正则表达式,只需在空行上断开就可以轻松做到这一点。
indexOf
substring
你尝试了什么?实际上,不使用正则表达式,只需中断空行即可轻松完成此任务。@user3791836您编写了
::head
而不是
::content
@user3791836您可以让它像这样变懒:
/^([\s\s]+?)::content/m
()。用代码更新了我的答案。@user3791836你写的是
::head
而不是
::content
@user3791836你可以这样做:
/^([\s\s]+?)::content/m
()。用代码更新了我的答案。我必须使用javascript。。。感谢回复JavaScript本机使用regex。你想要一个完整的应用程序还是正则表达式?您好,它在JS中不起作用。它返回null。。代码:
var file=readTextFile(“deneme.txt”);var result=file.match(/(::head.*?$^.*?$)^\s*$/m)
这似乎是js正则表达式的一个非常谨慎的警告,现在正在研究它。这里有一个用
\n
代替
$^
的替代方法,但我认为它在测试中不起作用。我必须使用javascript。。。感谢回复JavaScript本机使用regex。你想要一个完整的应用程序还是正则表达式?您好,它在JS中不起作用。它返回null。。代码:
var file=readTextFile(“deneme.txt”);var result=file.match(/(::head.*?$^.*?$)^\s*$/m)
这似乎是js正则表达式的一个非常谨慎的警告,现在正在研究它。这里有一个用
\n
代替
$^
的替代方法,但我也看不到它在测试中起作用