JavaScript正则表达式:提取指定标签后的多行文本
问题描述
我们将如下文本存储在变量description中:
This is a code update Official Name: None Pub: https://content.upcodes.co/viewer/washington/wa-mechanical-code-2021 Agency: Reference: https://web.archive.org/web/20230226234118/https://lawfilesext.leg.wa.gov/law/wsr/agency/BuildingCodeCouncil.htm Citation: WAC 51-52 / WSR 23-02-055 Draft Doc Title: WSR 23-02-055 (#1) Draft Source Doc: https://web.archive.org/web/20230303022030/https://lawfilesext.leg.wa.gov/law/wsr/2023/02/23-02-055.htm (#1) Draft Drive: https://drive.google.com/file/d/1pYmwQS3t-ZX-Vyg9yBabtIpXZ7By2G6f/view?usp=share_link ( #1) Final Doc Title: IECC Com Update(#1) IECC Res Update (#2) Final Source Doc: https://web.archive.org/web/20230303022130/https://apps.leg.wa.gov/wac/default.aspx?cite=51-52&full=true&pdf=true (#1) https://web.archive.org/web/20230303022030/https://lawfilesext.leg.wa.gov/law/wsr/2023/02/23-02-055.htm (#2) Final Drive: https://web.archive.org/web/20230303022130/https://apps.leg.wa.gov/wac/default.aspx?cite=51-52&full=true&pdf=true (#1) https://web.archive.org/web/2023030302fdfdfg2130/https://apps.legfdg.gov/wac/default.aspx?cite=51-52&fdsfullfdsf=true&pfdsfdf=true (#2) Effective Date: January 4, 2023
需要提取Final Doc Title:标签后的两行内容,即IECC Com Update(#1)和IECC Res Update (#2)。现有提取代码如下:
//8. Extract Final Doc Title var final_doc_title = description.search("Final Doc Title:"); if(final_doc_title != -1){ final_doc_title = description.match(/(?<=^Final Doc Title:)[^\n\r]+/m); final_doc_title = final_doc_title?.[0].trim(); }else{ final_doc_title = ''; } console.log('Final Doc Title: ' + final_doc_title);
由于Final Doc Title:后直接是换行符,该代码返回空字符串,需修改代码获取目标两行内容。
解决方案
修改正则表达式,匹配标签后的换行及后续多行内容,直到下一个标题区块前结束,代码如下:
//8. Extract Final Doc Title var final_doc_title = ''; const titleMatch = description.match(/Final Doc Title:\s*\n\s*(.*?)\s*(?=\n\nFinal Source Doc:)/s); if (titleMatch) { // 若需保留两行的换行格式,直接用 titleMatch[1].trim() final_doc_title = titleMatch[1].trim().replace(/\n+/g, ' '); } console.log('Final Doc Title: ' + final_doc_title);
正则说明
Final Doc Title:\s*\n:匹配标签本身,以及后续的换行和任意空白字符(.*?):非贪婪捕获后续内容,避免匹配到无关区块(?=\n\nFinal Source Doc:):正向预查,指定捕获截止到下一个标题的空行前s修饰符:让.可以匹配换行符,确保能捕获跨越多行的内容
内容的提问来源于stack exchange,提问作者alyssaeliyah
相关产品推荐
相关产品推荐

