繁体   English   中英

正则表达式-匹配某些分隔符之间的任何文本

[英]Regex - match any text between some delimiters

我尝试捕获此字符串[[....]] (包括方括号)

....可以是除]]以外的任何内容(包括不可打印的内容)

这是匹配的来源:

var myString = 'blablablabla[["<strong>LA DEFENSE 4 TEMPS ( La Rotonde )</strong><br />Centre commercial LES 4 TEMPS",
                         48.89141725,
                         2.23478235,
                         "4T"],
    ["<strong>ANGERS</strong><br />Centre commercial GEANT",
                         48.89141725,
                         2.23478235,
                         "4T"]]blablablabla'

我尝试使用此方法[^\\]]+匹配除双括号之外的所有字符/非字符。 我的问题是我不知道如何在第一个括号[^\\]\\]]+之后立即使用此方法。

是否存在正/负前瞻或单词边界的解决方案?

(\[\[[^\](?=\])]+)

正则表达式可视化

Debuggex演示

有什么帮助吗?

在JavaScript中,最好使用[^] / [\\s\\S] / [\\d\\D] / [\\w\\W]构造(在一个带有多个字符的定界符之间匹配任何文本)来实现最佳匹配量词( *?匹配0次或多次出现,或+?匹配1次或多次发生在前子模式,但返回有效匹配的次数越少越好)。

尽管与任何字符(包括换行符)匹配的[^]构造都是JavaScript特定的,但是[\\s\\S]及其变体大部分是跨平台构造,可在PCRE,.NET,Python,Java等环境中使用[...]在这种情况下, [...]是一个字符类,其中包含两个相反的速记类。 由于\\s匹配所有空白字符,而\\S匹配所有非空白字符,因此此[\\s\\S]匹配任何输入中存在的任何符号。

我建议避免使用(.|\\n) 这种构造会导致发生更多的回溯步骤,并减慢正则表达式的搜索速度。

因此,您可以使用

\[\[[\d\D]*?]]

参见JS正则表达式演示

这是一个代码片段:

 var re = /\\[\\[[\\d\\D]*?]]/g; var str = 'blablablabla[["<strong>LA DEFENSE 4 TEMPS ( La Rotonde )</strong><br />Centre commercial LES 4 TEMPS",\\n 48.89141725,\\n 2.23478235,\\n "4T"],\\n ["<strong>ANGERS</strong><br />Centre commercial GEANT",\\n 48.89141725,\\n 2.23478235,\\n "4T"]]blablablabla'; var m; while ((m = re.exec(str)) !== null) { console.log(m[0]); } 

UPDATE

在这种情况下,当定界符不同并且仅由2个字符组成时,可以使用一种技术来匹配所有字符,而不是闭合定界符的第一个符号,然后匹配整个闭合定界符的0个或多个序列,然后是1个或多个除定界符中的第一个符号以外的任何符号都出现。

\[\[[^\]]*(?:][^\]]+)*]]

正则表达式演示

此正则表达式的线性特征使其速度非常快。

PS我也要注意,您不需要在JS正则表达式中的字符类外部转义] ,但必须在字符类内部转义-始终。

尝试这个:

\[\[(.|\n)*?\]\]

https://regex101.com/r/gR5oJ3/1

它应该匹配[[ ]]之间的任何内容。 主要问题是处理换行符(.|\\n)部分将匹配包括换行符在内的所有内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM