Ketika kita memiliki string yang berisi karakter spasi:
var str = ' A B C D EF ';
dan kami ingin menghapus spasi dari string (kami ingin ini 'ABCDEF'
:).
Keduanya ini:
str.replace(/\s/g, '')
dan ini:
str.replace(/\s+/g, '')
akan mengembalikan hasil yang benar.
Apakah ini berarti bahwa +
tidak berguna dalam situasi ini? Apakah ada perbedaan antara kedua ekspresi reguler tersebut dalam situasi ini (seperti dalam, dapatkah keduanya memberikan hasil yang berbeda)?
Pembaruan: Perbandingan kinerja - /\s+/g
lebih cepat. Lihat di sini: http://jsperf.com/s-vs-s
javascript
regex
Šime Vidas
sumber
sumber
\s+
lebih cepat, karena dapat menggantikan potongan-potongan whitespace, sementara\s
harus mengganti setiap white space secara terpisah?Jawaban:
Di regex pertama, setiap karakter spasi diganti, karakter demi karakter, dengan string kosong.
Di regex kedua, setiap string karakter spasi yang berdekatan diganti dengan string kosong karena
+
.Namun, seperti bagaimana 0 dikalikan dengan apa pun adalah 0, tampaknya kedua metode tersebut menghapus spasi dengan cara yang persis sama.
Jika Anda mengubah string pengganti menjadi
'#'
, perbedaannya menjadi lebih jelas:var str = ' A B C D EF '; console.log(str.replace(/\s/g, '#')); // ##A#B##C###D#EF# console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#
sumber
\s
berarti "satu spasi", dan\s+
berarti "satu atau lebih spasi".Namun, karena Anda menggunakan
/g
bendera (mengganti semua kejadian) dan menggantinya dengan string kosong, kedua ekspresi Anda memiliki efek yang sama.sumber
\s+
, membiarkan sisanya utuh. Misalnya,' foo bar '.replace(/\s+/, '')
Anda hanya akan'foo bar '
mengedit HTML argh yang memadatkan dua spasi menjadi satug
pengubah, hanya kemunculan pertama dari blok spasi putih yang akan diganti.Dalam situasi pertandingan yang pertama akan mengembalikan satu pertandingan per spasi, ketika yang kedua akan mengembalikan pertandingan untuk setiap grup spasi putih.
Hasilnya sama karena Anda menggantinya dengan string kosong. Jika Anda menggantinya dengan 'x' misalnya, hasilnya akan berbeda.
str.replace(/\s/g, '')
akan mengembalikan 'xxAxBxxCxxxDxEF'sementara
str.replace(/\s+/g, '')
akan mengembalikan 'xAxBxCxDxEF'karena
\s
mencocokkan setiap spasi, mengganti setiap spasi dengan 'x', dan\s+
mencocokkan grup spasi, mengganti beberapa spasi putih berurutan dengan satu 'x'.sumber
+
berarti "satu atau lebih karakter" dan tanpa plus berarti "satu karakter." Dalam kasus Anda, keduanya menghasilkan keluaran yang sama.sumber