使用javascript中的正则表达式获取内容
如何使用正则表达式获取“head”段落(第一部分)文本?这是来自txt文件。您可以使用使用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
[\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
代替$^
的替代方法,但我也看不到它在测试中起作用