搜尋

首頁  >  問答  >  主體

javascript - js正規表示式求兩個字元之間的字串

這種字串
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
我想得到【和】之間的字串陣列
如何用一個正規搞定?
不包括兩個括號
目前我自己只能做到有括號的

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

全部回覆(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
  • 取消回覆