首页  >  问答  >  正文

javascript - js正则表达式求两个字符之间的字符串

这种字符串
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
我想得到【和】之间的字符串数组
如何用一个正则搞定?
不包括两个括号
目前我自己只能做到带括号的

var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; 
var patt = /\【[^\】]+\】/g; 
d.match(patt)
伊谢尔伦伊谢尔伦2730 天前756

全部回复(5)我来回复

  • 大家讲道理

    大家讲道理2017-05-19 10:39:52

    雷雷

    回复
    0
  • 给我你的怀抱

    给我你的怀抱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开头的数字串

    回复
    0
  • 淡淡烟草味

    淡淡烟草味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, (
    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);
    , )=>',!' + + ',').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 matches;
    var result = [];
    while ( !!(matches = patt.exec(d)) ) {
        result.push(matches[1]);
    }
    console.log(result);

    以下是原答案:

    rrreee

    回复
    0
  • 怪我咯

    怪我咯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])
    }

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:39:52

    雷雷

    回复
    0
  • 取消回复