![](/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.