gpt4 book ai didi

javascript - 正则表达式 - 匹配某些定界符之间的任何文本

转载 作者:行者123 更新时间:2023-11-29 19:20:11 24 4
gpt4 key购买 nike

我尝试捕捉这个字符串[[....]](包括方括号)

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

这是匹配的来源:

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'

我尝试使用此方法 [^\]]+ 来匹配除双括号之外的所有字符/非字符。我遇到的问题是我不知道如何将此方法与紧接在第一个括号 [^\]\]]​​+ 之后的括号一起使用。

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

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

Regular expression visualization

Debuggex Demo

有什么帮助吗?

最佳答案

在 JavaScript 中,要匹配包含多个字符的某些分隔符之间的任何文本,最好使用 [^]/[\s\S]/[\d\D]/[\w\W] 构造带有惰性量词(*? 匹配 0 次或多次出现,或 +? 匹配前面子模式的 1 次或多次出现,但尽可能少以返回有效匹配)。

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

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

所以,你可以使用

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

参见 JS regex demo

这是一个代码片段:

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]);
}

更新

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

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

参见 regex demo

这个正则表达式的线性特性让它非常快。

附言我还想指出,您不需要在 JS 正则表达式的字符类之外转义 ],但它必须在字符类内转义 - 始终如此。

关于javascript - 正则表达式 - 匹配某些定界符之间的任何文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33421242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com