这种字符串var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
我想得到【和】之间的字符串数组
如何用一个正则搞定?
不包括两个括号
目前我自己只能做到带括号的
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【[^\】]+\】/g;
d.match(patt)
===========
d.replace(/\【[^\】]+\】/g, ($0, $1) {
// $0是带【】的匹配
// $1是不带【】的匹配
})
非常简单,用零宽断言:
上面只用了零宽度正预测先行断言,实际上如果
不限于JavaScript的话是新版 Chrome、新版 Node.JS 的话,还可以写成零宽断言分为两类四种:
正向零宽断言
零宽度正预测先行断言
(?=exp)
表示自身位置之后可以匹配到exp的表达式,而不匹配exp。
比如
\d+(?=999)
表示以999结尾的数字串(但是匹配结果不包含999)零宽度正回顾后发断言
(?<=exp)
(JavaScript不支持新版 Chrome、新版 Node.JS 支持,Firefox 至今不支持,其他未测试)表示自身位置之前可以匹配到exp的表达式,而不匹配exp。
比如
(?<=999)\d+
表示以999开头的数字串(但是匹配结果不包含999)负向零宽断言
零宽度负预测先行断言
(?!exp)
表示自身位置之后不能是exp的表达式。
比如
\d+(?!999)
表示匹配不是以999结尾的数字串零宽度负回顾后发断言
(?<!exp)
(JavaScript不支持新版 Chrome、新版 Node.JS 支持,Firefox 至今不支持,其他未测试)表示自身位置之前不能是exp的表达式。
比如
(?<!999)\d+
表示匹配不是以999开头的数字串举个例子
在新版 Chrome 下可以得到结果:
在 Firefox 或是旧版 Chrome 下无法执行。