⊗jsSpRELAB 133 of 294 menu

Lookahead dan Lookbehind Positif/Negatif dalam Regex JavaScript

Terkadang kita perlu menyelesaikan masalah seperti ini: temukan string 'aaa' dan ganti dengan '!', tetapi hanya jika setelah 'aaa' terdapat 'x', sedangkan 'x' itu sendiri tidak diganti. Jika kita mencoba menyelesaikan masalah 'secara langsung', kita tidak akan berhasil:

'aaax baaa'.replace(/aaax/g, '!'); // mengembalikan '! baaa', sedangkan yang diinginkan adalah '!x baaa'

Lookahead

Untuk menyelesaikan masalah ini, diperlukan cara untuk menyatakan bahwa 'x' tidak boleh diganti. Hal ini dilakukan dengan menggunakan kurung khusus (?= ), yang hanya "melihat" tetapi tidak "mengambil".

Kurung ini disebut positive lookahead. Positif - karena 'x' (dalam kasus kita) harus ada - hanya then penggantian akan terjadi.

Mari kita terapkan kurung ini untuk menyelesaikan masalah kita:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // mengembalikan '!x aaab'

Ada juga negative lookahead - (?! ) - yang, sebaliknya, menyatakan bahwa sesuatu harus tidak ada. Dalam contoh berikut, penggantian akan terjadi hanya jika setelah 'aaa' bukan 'x':

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // mengembalikan 'aaax !b'

Lookbehind

Secara analog, terdapat positive lookbehind - (?<= ). Dalam contoh berikutnya penggantian akan terjadi hanya jika sebelum 'aaa' terdapat 'x':

'xaaa'.replace(/(?<=x)aaa/g, '!'); // mengembalikan 'x!'

Dan ada juga negative lookbehind - (?<! ). Dalam contoh berikut, penggantian akan terjadi hanya jika sebelum 'aaa' tidak terdapat 'x':

'baaa'.replace(/(?<!x)aaa/g, '!'); // mengembalikan 'b!'

Masalah Praktis

Diberikan sebuah string yang berisi nama-nama fungsi:

let str = 'func1() func2() func3()';

Dapatkan array berisi nama-nama fungsi dari string tersebut.

Diberikan sebuah string dengan tag:

let str = '<a href="" class="eee" id="zzz">';

Dapatkan array berisi nama-nama atribut dari tag ini.

Diberikan sebuah string dengan variabel-variabel:

let str = '$aaa $bbb $ccc xxxx';

Dapatkan substring yang didahului oleh tanda dolar.

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