簡體   English   中英

javascript正則表達式以匹配帶有換行符的花括號,但並非沒有

[英]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}"]

試試這個:

   \{([^{\n]+)\}

我在這里測試過: http : //regex101.com/r/vJ6gU1

這適用於您的字符串:

 "did you know {the quick {brown\nfox} jumps over the lazy dog} is\na pangram?"
.match(/\{[^{}]+\}/)

返回{brown\\nfox}

/\\{[^{}]+\\}/

  1. 匹配{
  2. 匹配所有非{}
  3. 匹配一個}

DEMO

這將起作用嘗試

\{([^{]+?)\}

我認為這是您追求的目標:

/\{[^{}\n]*\n[^{}]*\}/

[^{}\\n]*\\n會消耗掉所有到下一個換行符的內容,但是如果首先看到一個花括號,它將失敗。

然后[^{}]*消耗其余部分,因為是否有換行符都沒有關系。

我假設您的行分隔符由單獨的換行符( \\n )或回車符加換行符( \\r\\n )組成。 還有其他可能性,但是它們很少見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM