Heim > Fragen und Antworten > Hauptteil
Diese Art von Stringvar d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
Ich möchte das String-Array zwischen [und] erhalten
Wie verwende ich einen regulären Ausdruck?
Beinhaltet keine zwei Klammern
Derzeit kann ich es nur mit Klammern machen
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【[^\】]+\】/g;
d.match(patt)
大家讲道理2017-05-19 10:39:52
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【([^\】]+)\】/g;
var arr = [];
d.replace(patt,function($0,$1){arr.push($1)});
给我你的怀抱2017-05-19 10:39:52
非常简单,用零宽断言:
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
d.match(/[^【]+(?=】)/g);
上面只用了零宽度正预测先行断言,实际上如果不限于JavaScript的话,还可以写成
(?<=【).+?(?=】)
零宽断言分为两类四种:
(?=exp)
表示自身位置之后可以匹配到exp的表达式,而不匹配exp。
比如\d+(?=999)
表示以999结尾的数字串(但是匹配结果不包含999)
(?<=exp)
(JavaScript不支持)表示自身位置之前可以匹配到exp的表达式,而不匹配exp。
比如(?<=999)\d+
表示以999开头的数字串(但是匹配结果不包含999)
(?!exp)
表示自身位置之后不能是exp的表达式。
比如\d+(?!999)
表示匹配不是以999结尾的数字串
(?<!exp)
(JavaScript不支持)表示自身位置之前不能是exp的表达式。
比如(?<!999)\d+
表示匹配不是以999开头的数字串
淡淡烟草味2017-05-19 10:39:52
参考 @hack_qtxz 使用replace实现。
var d= "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【([^\】]+)\】/g;
var result = d.replace(patt, ($0, $1)=>',!' + $1 + ',').split(',').filter(v=>-1 != v.indexOf('!')).map(v=>v.substr('1'));
console.log(result);
以下使原答案:
和 @舒克 答案有点重复了,在换一个写法。
var d= "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【[^\】]+\】/g;
var result = d.match(patt).map(v => v.substr(1, v.length-2));
console.log(result);
以下是原答案:
var d= "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var patt = /\【([^\】]+)\】/g;
var matches;
var result = [];
while ( !!(matches = patt.exec(d)) ) {
result.push(matches[1]);
}
console.log(result);
怪我咯2017-05-19 10:39:52
引用 @cipchk 给你补全代码吧。
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var myregexp = /【([^】]+)/g;
var result;
while ((result = myregexp.exec(d)) != null) {
console.log(result[1])
}
巴扎黑2017-05-19 10:39:52
var myregexp = /【([^】]+)/g;
var match = myregexp.exec(subject);
while (match != null) {
// matched text: match[0]
// match start: match.index
// capturing group n: match[n]
match = myregexp.exec(subject);
}