javascript - ungkapan biasa js untuk mencari rentetan antara dua aksara
伊谢尔伦
伊谢尔伦 2017-05-19 10:37:52
0
5
793

Rentetan jenis ini
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
Saya mahu mendapatkan tatasusunan rentetan antara [dan]
Bagaimana untuk menggunakan ungkapan biasa?
Tidak termasuk dua kurungan
Pada masa ini saya hanya boleh melakukannya dengan kurungan

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

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(5)
大家讲道理
var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; 
var patt = /\【([^\】]+)\】/g; 
var arr = [];
d.replace(patt,function(rrreee,){arr.push()});
给我你的怀抱

Sangat mudah, gunakan penegasan lebar sifar:

var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
d.match(/[^【]+(?=】)/g);

Hanya penegasan pandangan positif lebar sifar digunakan di atas, sebenarnya, jika ia tidak terhad kepada JavaScript, ia juga boleh ditulis sebagai

(?<=【).+?(?=】)

Ketegasan lebar sifar dibahagikan kepada dua kategori dan empat jenis:

Penegasan lebar sifar ke hadapan

Pernyataan pandangan ke hadapan positif lebar sifar (?=exp)

(?=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+Menunjukkan bahawa ungkapan selepas kedudukannya sendiri boleh memadankan exp, tetapi tidak sepadan dengan exp.
Contohnya, d+(?=999) mewakili rentetan nombor yang berakhir dengan 999 (tetapi hasil yang sepadan tidak termasuk 999)

🎜Pernyataan positif lebar sifar (?<=exp) (tidak disokong oleh JavaScript) 🎜Menunjukkan bahawa ungkapan yang boleh memadankan exp sebelum kedudukannya sendiri tidak sepadan dengan exp.
Contohnya, (?<=999)d+ mewakili rentetan angka bermula dengan 999 (tetapi hasil padanan tidak termasuk 999)🎜 🎜Penegasan lebar sifar negatif🎜 🎜Pernyataan pandangan negatif lebar sifar (?!exp) 🎜Ungkapan yang menunjukkan kedudukannya sendiri tidak boleh diikuti oleh exp.
Sebagai contoh, d+(?!999) bermaksud memadankan rentetan nombor yang tidak berakhir dengan 999🎜 🎜Pernyataan lihat balik negatif lebar sifar (?<!exp) (tidak disokong oleh JavaScript) 🎜Ungkapan yang menunjukkan kedudukannya sendiri tidak boleh didahului oleh exp.
Sebagai contoh, (?<!999)d+ bermaksud memadankan rentetan nombor yang tidak bermula dengan 999🎜
淡淡烟草味

Rujukan @hack_qtxz Dilaksanakan menggunakan 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);

Berikut ialah jawapan asal:

dan @Shuke Jawapannya agak berulang, jadi saya menulisnya dengan cara yang berbeza.

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);

Berikut ialah jawapan asal:

rrreee
刘奇

Petikan @cipchk untuk melengkapkan kod untuk anda.

var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
var myregexp = /【([^】]+)/g;
var result;
while ((result = myregexp.exec(d)) != null) {
    console.log(result[1])
}
巴扎黑
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);
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan