匹配直到角色的未转义版本

时间:2017-04-23 00:02:29

标签: javascript regex

我正在处理像[enclosed str]outer str[enclosed str]这样的字符串格式 我正在尝试匹配所有[enclosed str]

问题在于,我希望任何字符除了非]的非转义版本(]前面没有\)都在方括号内。

例如

str = 'string[[enclosed1\\]]string[enclosed2]';

// match all [ followed by anything other ] then a ]
str.match(/\[[^\]]+]/g)
// returns ["[[enclosed1\]", "[enclosed2]"]
// ignores the `]` after `\\]`

// match word and non-word char enclosed by []
str.match(/\[[\w\W]+]/g)
// returns ["[[enclosed1\]]string[enclosed2]"]
// matches to the last ]
// making it less greedy with /\[[\w\W]+?]/g
// returns same result as /\[[^\]]+]/g

在Javascript RegExp中是否可以实现我想要的结果

["[[enclosed1\]]", "[enclosed2]"]

1 个答案:

答案 0 :(得分:1)

使用javascript中的正则表达式不支持负面的背后,这是我能想到的最好的:

/(?:^|[^\\])(\[.*?[^\\]\])/g

第1组将包含您想要的字符串。

https://regex101.com/r/PmDcGH/3