Soalan:
Dalam JavaScript, yang tidak mempunyai Regex pandang belakang, adakah terdapat cara untuk memadankan corak tertentu tidak termasuk corak tertentu syarat?
Jawapan:
Sebelum ECMAScript 2018, JavaScript tidak asli menyokong pandangan negatif di sebalik pernyataan. Berikut ialah pendekatan alternatif:
^(?:(?!filename\.js$).)*\.js$
Penjelasan:
Reeks reg ini mensimulasikan pandangan di belakang dengan menyemak secara eksplisit setiap aksara rentetan. Jika ungkapan lihat di belakang ("nama fail.js$"), diikuti oleh regex yang lain (".js$"), tidak sepadan dengan aksara semasa, aksara itu dibenarkan.
^ # Start of string (?: # Try to match the following: (?! # First assert that we can't match the following: filename\.js # filename.js $ # and end-of-string ) # End of negative lookahead . # Match any character )* # Repeat as needed \.js # Match .js $ # End of string
Walau bagaimanapun, alternatif yang lebih mudah telah muncul sejak itu:
^(?!.*filename\.js$).*\.js$
Pendekatan terakhir ini adalah lebih cekap kerana ia tidak memeriksa pandangan ke hadapan pada setiap watak.
^ # Start of string (?! # Assert that we can't match the following: .* # any string, filename\.js # followed by filename.js $ # and end-of-string ) # End of negative lookahead .* # Match any string \.js # Match .js $ # End of string
Atas ialah kandungan terperinci Bolehkah Pandangan Negatif Meniru Pandangan Regex di Belakang dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!