我尝试使用正则表达式(正则表达式),例如(如果使用javascript):
var str = '[abc\[0123\]] [efg\[987\]h] [Hello \[world\]!] [foo [baz]]';
str.match(/\[(.*?)\]/g);
输出:
["[abc[0123]", "[efg[987]h", "[Hello [world]!", "[foo [baz]"]
或者
var str = '{abc\{0123\}} {efg\{987\}h} {Hello \{world\}!} {foo {baz}}';
str.match(/\{(.*?)\}/g);
输出:
["{abc{0123}", "{efg{987}", "{Hello {world}", "{foo {baz}"]
但是我要求您忽略第一个未转义为[foo [baz]]
且仅捕获[baz]
的项目以及其他已转义的项目:
["[abc[0123]]", "[efg[987]h]", "[Hello [world]!]", "[baz]"]
第二个例子返回:
{"{abc{0123}}", "{efg{987}h}", "{Hello {world}!}", "{baz}"]
我最初的目的是研究,但也计划在类似CSS选择器的结构中使用:
例如:
input[name=\[0\]], input[name=foo\[baz\]\[bar\]]
返回:
[0], [1]
我计划创建的网址地图:
/{name}/{foo\{bar}/{baz\{foo\}}/
返回:
{name}, {foo{bar}, {baz{foo}}
我想要的是忽略逃到规则中的角色,我该怎么做?可以提供任何语言的例子,最重要的是正则表达式
答案 0 :(得分:0)
由于你不是(也不能)做平衡文本,你能做的最好的就是帐户
用于逃生或逃生支架。
请注意,我没有包括这些正则表达式的展开版本,因为这些
需要一个身体。
(根据需要替换{}
)。
第一个闭包
\[(?:\\[\\\[\]]|[^\]])+\]
扩展
\[
(?:
\\ [\\\[\]]
|
[^\]]
)+
\]
绝对内括号
\[(?:\\[\\\[\]]|[^\[\]])+\]
扩展
\[
(?:
\\ [\\\[\]]
|
[^\[\]]
)+
\]