Javascript正则表达式匹配维基百科部分文本

时间:2013-02-07 04:48:38

标签: javascript regex wikipedia wikipedia-api

鉴于维基百科文章的文本(参见http://test.wikipedia.org/w/index.php?title=Paris&action=raw),我想提取所有需要引用的部分。在维基百科标记中,需要引用由{{Citation needed}}表示,部分标题由两个等于​​主要部分的符号(例如==Section 1==)或三个等号(例如===Section 1A===}表示。 )对于小节。

我的正则表达方式:

/(={2,3}[^==]+={2,3}[^==]+\{{2}Citation needed[^}}]*\}{2}[^==]*)(={2,3}[^==]+={2,3})?/g

我的正则表达式适用于许多部分,但不适用于其他部分,我无法理解为什么。

DOES 匹配:

  

===法国首都=== [[File:ElyséePalace,Paris 2005.jpg | thumb | right | [[ÉlyséePalace]],[[法国总统|法国总统]]的住所。 ]]巴黎是其所在地   法国的国家政府。对于执行官来说,两位负责人   每个官员都有自己的官邸,也可以作为   他们的办公室[[法国总统]]居住在[[Élysée   宫[] [[巴黎第8区|第8区]],   虽然[[法国总理] |总理]的席位是在   [[HôtelMatignon]]在[巴黎第7区| 7日   郡]。政府部门分布在各个部分   城市的;许多都位于第7区,靠近   马蒂尼翁。

     

法国议会的两院也位于[[Rive   Gauche |左岸]]。上议院,[[法国参议院|参议院]],   在[[Palais du Luxembourg]]见面[[6th arrondissement of the   巴黎|第6区],而更重要的下院,   [[AssembléeNationale]],在[[Palais Bourbon]]会见[[7]   巴黎区| 7日]。 [[法国总统名单]   参议院|参议院议长]],第二高级公职人员   在共和国总统之后的法国,居住在“佩蒂特   卢森堡“,[[Palais du   卢森堡]]。{{Citation needed | date = June 2010}}

匹配:

  

===社区间===上述变化中很少考虑到巴黎作为[[聚集]]的存在。与大多数人不同   法国的主要城市地区如[[Lille]]和[[Lyon]],没有   [[法国公社#intercommunality | intercommunal]]实体   巴黎市区,没有社区委员会处理问题   该地区作为一个整体密集的城市核心;巴黎对其的异化   郊区确实是一个问题,并被很多人考虑   {{Who | date = April 2011}}成为内乱等的主要原因   2005年的郊区骚乱。这些不幸的直接后果   事件是一个更有效的大都市结构的命题   覆盖巴黎市和一些郊区,不等   松散的“都市会议”的社会主义思想(''conférence   métropolitaine'')右翼的想法是一个更加整合的''Grand   巴黎''(“大巴黎”)。

     

这种不连贯的主要原因之一就是恐惧感   法国在这样一个巨大的集聚和愿望面前   挖掘财富。 {{Citation needed | date = April 2011}}自从   中世纪,特别是1649年的麻烦(La Fronde),   巴黎被认为是危险的来源。专制   XIVth国王路易斯将凡尔赛宫建成了一个新的政治中心   来自危险的城市人群。国家与国家之间的冲突   城市与1871年的革命(La Commune)达到了高潮:   法国波尔多议会决定巴黎不再是巴黎   首都,而巴黎公社讨论宣布巴黎   独立于法国。从那以后,其中一个基础了   集权的法国国家一直在广泛分配巴黎的财富   同时剥夺了集聚并将其分为8个   部门和1 200个公社。 (用于分析长期敌意   针对巴黎,见[http://www-ohp.univ-paris1.fr/] {{验证   来源|日期= 2011年4月}})。在22个法国大都市区中,有19个   定期补贴 - 主要是巴黎资源 - 而巴黎   郊区缺乏必要的设备。

我的正则表达式出了什么问题?

编辑:下面的新工作正则表达式!

/(={2,3}((?!==).)+={2,3}((?!==)[^])+\{{2}Citation needed((?!}})[^])*\}{2}((?!==)[^])*)/g

说明:匹配任何部分或子标题(== Section ==或=== Subsection ===),后跟任何不是两个等号的东西,然后是{{Citation needed}} - 就像字符串一样,紧随其后其他一切都不是两个等于标志。

1 个答案:

答案 0 :(得分:1)

问题来自于这样的序列:{{Who|date=。用于匹配标题与{{Citation Needed}}之间文本的代码在遇到=

时失败