⊗jsSpREGL 101 of 294 menu

Menghadkan Ketamakan dalam Ungkapan Biasa di JavaScript

Ungkapan biasa secara lalai adalah greedy (tamak). Ini bermakna ia akan menangkap jumlah aksara maksimum yang mungkin. Mari kita lihat contoh. Katakan kita mempunyai tali seperti berikut:

let str = 'aeeex zzz x kkk';

Katakan kita mahu mencari subrentetan 'aeeex' dalam tali ini menggunakan corak berikut: huruf 'a', kemudian sebarang aksara satu atau lebih kali, kemudian huruf 'x'.

let res = str.replace(/a.+x/g, '!');

Kami menjangkakan bahawa hasilnya dalam pembolehubah akan menjadi rentetan '! zzz x kkk'. Walau bagaimanapun, ianya tidak begitu - pembolehubah mengandungi rentetan '! kkk'.

Masalahnya ialah ungkapan biasa kami mencari semua aksara dari huruf 'a' hingga huruf 'x'. Tetapi dalam rentetan kami terdapat dua huruf 'x'! Disebabkan sifat tamak, ungkapan biasa akan mencari sehingga huruf 'x' terakhir, seterusnya menangkap bukan yang kita jangkakan.

Sudah tentu, selalunya tingkah laku ini adalah yang kita perlukan. Tetapi khusus dalam kes ini, kami ingin membatalkan sifat tamak dan memberitahu ungkapan biasa untuk mencari hingga huruf 'x' pertama.

Untuk menghadkan ketamakan, anda perlu meletakkan tanda tanya selepas operator pengulangan:

let res = str.replace(/a.+?x/g, '!');

Ketamakan boleh dihadkan untuk semua operator pengulangan: baik *, ?, mahupun {} - seperti ini: *?, ?? dan {}?.

Diberikan rentetan:

let str = 'aba accca azzza wwwwa';

Tulis ungkapan biasa yang akan mencari semua rentetan yang diapit oleh huruf 'a', dan menggantikan setiap satu dengan '!'. Antara huruf 'a' boleh terdapat sebarang aksara (selain 'a').

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak