![](/img/trans.png)
[英]Regex match pattern into a characters string OR another pattern in the same characters string
[英]Regex: Match string with substrings with the same pattern
我正在尝试将字符串与模式匹配,该模式可以具有相同模式的子字符串。
这是一个示例字符串:
尼加拉瓜[[注释|注释|刚果自1999年起成为ICCROM成员,1971年成为尼加拉瓜成员。2013年11月,ICCROM大会暂停了这两项成员,连续六年没有缴纳会费(ICCROM [[章程| | | url] | www.iccrom.org/about/statutes/]],第9条。]]。 可能出现的另一个[[link | url | google.com]]。
这是模式:
[[display_text|code|type|content]]
所以,我想要的是在括号内获取字符串,然后查找更多与顶级模式匹配的字符串。
而我想要的是匹配这个:
- [[注| s |注释|刚果自1999年起成为ICCROM成员,1971年成为尼加拉瓜成员。2013年11月,ICCROM大会暂停了这两项成员,但连续六年没有缴纳会费(ICCROM [[章程| |] url | www.iccrom.org/about/statutes/]],第9条。)]
1.1 [[章程| s | url | www.iccrom.org/about/statutes/]]
- [链接| S |网址| google.com]
我正在使用这个/( /(\\[\\[.*]])/
]]
。 ]]
。 ]]
但它直到最后才获得所有]]
。
我想要的是能够识别匹配的字符串并将它们转换为HTML元素,其中|note|
将成为一个blockquote标签和|url|
a
标签。 因此,blockquote标记内部可以包含链接标记。
顺便说一下,我正在使用CoffeeScript来做到这一点。
提前致谢。
通常,正则表达式不擅长处理嵌套表达式。 如果你使用贪婪的模式,它们会匹配太多,如果你使用非贪婪的模式,正如@bjfletcher建议的那样,它们匹配得太少,停在外部内容中。 这里的“传统”方法是一个基于令牌的解析器,您可以逐个遍历字符并构建一个抽象语法树(AST),然后根据需要重新格式化。
我在这里使用的一种略微hacky方法是将字符串转换为JSON字符串,让JSON解析器完成转换为嵌套对象的艰苦工作: http : //jsfiddle.net/t09q783d/1/
function toPoorMansAST(s) {
// escape double-quotes, as they'll cause problems otherwise. This converts them
// to unicode, which is safe for JSON parsing.
s = s.replace(/"/g, "\u0022");
// Transform to a JSON string!
s =
// Wrap in array delimiters
('["' + s + '"]')
// replace token starts
.replace(/\[\[([^\|]+)\|([^\|]+)\|([^\|]+)\|/g,
'",{"display_text":"$1","code":"$2","type":"$3","content":["')
// replace token ends
.replace(/\]\]/g, '"]},"');
return JSON.parse(s);
}
这将为您提供一个字符串和结构化对象的数组,然后您可以通过格式化程序来运行您想要的HTML。 格式化程序留给用户:)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.