[英]javascript regex to match braces with line breaks, but not without
我正在嘗試用javascript獲取正則表達式,以匹配在一個或多個換行符以及可能存在標簽嵌套的字符串中,花括號(包括)所包含的區域。 因此它將匹配字符串中的{the quick brown fox ... lazy dog}
:
did you know {the quick brown fox
jumps
over the lazy dog} is a pangram?
但不包含以下字符串中的花括號區域,因為它不包含換行符
did you know {the quick brown fox jumps over the lazy dog} is a pangram?
在嵌套時,我不會感到困惑,因為在下面的示例中,我只希望匹配brown \\n fox
,因為它是包含換行符的直接括號。
did you know {the quick {brown
fox} jumps over the lazy dog} is
a pangram?
明顯的/\\{([^{]+)\\}/g
可以匹配卷曲集中的任何內容,但這可能意味着它會在{the quick {brown \\n fox}
和{brown \\n fox} jumps over the lazy dog}
錯誤地匹配{brown \\n fox} jumps over the lazy dog}
。 我開始認為子字符串匹配可能是這種方式,就像小胡子js這樣的css模板系統那樣。
要確保字符串中至少有一個換行符,請使用如下所示的正則表達式:
/\{(?=.*\n)[^}]+\}/
安慰:
> "aaa{ccc}bbb".match(/\{(?=.*\n)[^}]+\}/)
null
> "aaa{ccc\ndddd}bbb".match(/\{(?=.*\n)[^}]+\}/)
["{ccc
dddd}"]
此模式將有效/\\{(?=.*\\s)[^{}]+\\}/
從控制台
a = "aa{aaaa
bb}b"
b = "aaaa{cccc}bbb"
c = "aaaaaaa{sssss{ddd
dd}bbb}sss"
a.match(/\{(?=.*\s)[^{}]+\}/)
["{aaaa
bb}"]
b.match(/\{(?=.*\s)[^{}]+\}/)
null
c.match(/\{(?=.*\s)[^{}]+\}/)
["{ddd
dd}"]
這適用於您的字符串:
"did you know {the quick {brown\nfox} jumps over the lazy dog} is\na pangram?"
.match(/\{[^{}]+\}/)
返回{brown\\nfox}
。
/\\{[^{}]+\\}/
:
{
{
或}
。 }
這將起作用嘗試
\{([^{]+?)\}
我認為這是您追求的目標:
/\{[^{}\n]*\n[^{}]*\}/
[^{}\\n]*\\n
會消耗掉所有到下一個換行符的內容,但是如果首先看到一個花括號,它將失敗。
然后[^{}]*
消耗其余部分,因為是否有換行符都沒有關系。
我假設您的行分隔符由單獨的換行符( \\n
)或回車符加換行符( \\r\\n
)組成。 還有其他可能性,但是它們很少見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.