這種字串var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; 我想得到【和】之間的字串陣列如何用一個正規搞定? 不包括兩個括號目前我自己只能做到有括號的
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; var patt = /\【[^\】]+\】/g; d.match(patt)
小伙看你根骨奇佳,潜力无限,来学PHP伐。
雷雷
很簡單,用零寬斷言:
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; d.match(/[^【]+(?=】)/g);
上面只用了零寬度正預測先行斷言,實際上如果不限於JavaScript的話,還可以寫成
(?<=【).+?(?=】)
零寬斷言分為兩類四種:
(?=exp)
表示自身位置之後可以符合到exp的表達式,而不符合exp。 例如d+(?=999)表示以999結尾的數字串(但是匹配結果不包含999)
d+(?=999)
(?<=exp)
表示自身位置之前可以匹配到exp的表達式,而不匹配exp。 例如(?<=999)d+表示以999開頭的數字串(但是匹配結果不包含999)
(?<=999)d+
(?!exp)
表示自身位置之後不能是exp的表達式。 例如d+(?!999)表示匹配不是以999結尾的數字串
d+(?!999)
(?<!exp)
表示自身位置之前不能是exp的表達式。 例如(?<!999)d+表示匹配不是以999開頭的數字字串
(?<!999)d+
參考 @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 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);
以下是原答案:
引用 @cipchk 給你補全代碼吧。
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; var myregexp = /【([^】]+)/g; var result; while ((result = myregexp.exec(d)) != null) { console.log(result[1]) }
雷雷
很簡單,用零寬斷言:
上面只用了零寬度正預測先行斷言,實際上如果不限於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開頭的數字字串參考 @hack_qtxz 使用replace實作。
以下使原答案:
和 @舒克 答案有點重複了,在換一個寫法。
以下是原答案:
rrreee引用 @cipchk 給你補全代碼吧。
雷雷