【发布时间】:2016-09-04 12:24:41
【问题描述】:
我正在尝试使用正则表达式(正则表达式),例如(如果使用 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] -
以及我计划创建的 URL 地图:
/{name}/{foo\{bar}/{baz\{foo\}}/返回:
{name}, {foo{bar}, {baz{foo}}
我想要忽略转义到规则中的字符,我该怎么做?可以提供任何语言的例子,最重要的是Regex
【问题讨论】:
-
我猜你的意思是
var str = '[abc\\[0123\\]] [efg\\[987\\]h] [Hello \\[world\\]!] [foo [baz]]';。然后,如果要匹配转义的]和[,请使用\[[^\[\]\\]*(?:\\.[^\[\]\\]*)*\]。请注意,它不会匹配[foo [baz]],因为内括号没有转义。