Saya ingin menghapus ""
sekitar String.
misal jika Stringnya adalah: "I am here"
maka saya ingin output saja I am here
.
javascript
regex
ankur
sumber
sumber
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
menggantikan tanda kutip batas. Jawaban Mr_Green secara global akan menggantikan SEMUA"
yang tidak baikJawaban:
Asumsi:
Itu harus melakukan trik ... (jika tujuan Anda adalah mengganti semua tanda kutip ganda).
Begini cara kerjanya:
['"]
adalah kelas karakter, cocok dengan tanda kutip tunggal dan ganda. Anda dapat menggantinya dengan"
hanya mencocokkan tanda kutip ganda.+
: satu atau lebih tanda kutip, karakter, seperti yang didefinisikan oleh char-class sebelumnya (opsional)g
: bendera global . Ini memberitahu JS untuk menerapkan regex ke seluruh string. Jika Anda menghilangkan ini, Anda hanya akan mengganti satu karakter.Jika Anda mencoba untuk menghapus tanda kutip di sekitar string yang diberikan (yaitu berpasangan), semuanya menjadi sedikit lebih rumit. Anda harus menggunakan pernyataan lookaround:
Regex menjelaskan:
"
: literal, cocok dengan literal apa pun"
(
: mulai menangkap grup. Apa pun yang berada di antara tanda kurung (()
) akan ditangkap, dan dapat digunakan dalam nilai penggantian.[^"]+
: Kelas karakter, cocok semua karakter, kecuali"
1 kali atau lebih(?=")
: nol-lebar (seperti yang tidak ditangkap) pernyataan lookahead positif. Pertandingan sebelumnya hanya akan valid jika diikuti oleh"
literal)
: end capturing group, kami telah menangkap semuanya di antara penutupan pembukaan"
"
: satu lagi literal, daftar item cfPenggantinya adalah
'$1'
, ini adalah referensi-kembali ke kelompok yang ditangkap pertama, sedang[^" ]+
, atau setiap di antara tanda kutip ganda. Pola tersebut cocok dengan tanda kutip dan apa yang ada di antara mereka, tetapi menggantinya hanya dengan apa yang ada di antara tanda kutip, sehingga secara efektif menghapusnya.Apa yang dilakukannya adalah
some "string with" quotes
-> diganti"string with"
dengan ->string with
. Kutipan hilang, pekerjaan selesai.Jika kutipan selalu berada di awal dan akhir string, maka Anda bisa menggunakan ini:
Dengan input
remove "foo" delimiting "
, output akan tetap tidak berubah, tetapi ubah string input menjadi"remove "foo" delimiting quotes"
, dan Anda akan berakhir denganremove "foo" delimiting quotes
sebagai output.Penjelasan:
^"
: cocok dengan awal string^
dan a"
. Jika string tidak dimulai dengan a"
, ekspresi sudah gagal di sini, dan tidak ada yang diganti.(.+(?="$))
: cocok (dan menangkap) semuanya, termasuk tanda kutip ganda satu kali atau lebih, asalkan lookahead positif itu benar(?="$)
: lookahead positif sama seperti di atas, hanya itu menentukan bahwa"
harus menjadi akhir dari string ($
=== end)"$
: cocok dengan kutipan yang berakhir, tetapi tidak menangkapnyaPenggantian dilakukan dengan cara yang sama seperti sebelumnya: kami mengganti pertandingan (yang termasuk kutipan pembukaan dan penutupan), dengan semua yang ada di dalamnya.
Anda mungkin memperhatikan bahwa saya telah menghilangkan
g
flag (untuk BTW global), karena sejak kami memproses seluruh string, ungkapan ini hanya berlaku sekali.Regex yang lebih mudah, cukup banyak, hal yang sama (ada perbedaan internal tentang bagaimana regex dikompilasi / diterapkan) adalah:
Seperti sebelumnya
^"
dan"$
cocok dengan tanda kutip pembatas di awal dan akhir string, dan cocokkan(.+)
semuanya di antara, dan menangkapnya. Saya sudah mencoba regex ini, di samping yang di atas (dengan pernyataan lookahead) dan, harus diakui, saya terkejut menemukan ini sedikit lebih lambat. Dugaan saya adalah bahwa pernyataan lookaround menyebabkan ekspresi sebelumnya gagal segera setelah mesin menentukan tidak ada"
pada akhir string. Ah well, tetapi jika ini yang Anda inginkan / butuhkan, harap baca terus :Namun, dalam kasus terakhir ini, ini jauh lebih aman, lebih cepat, lebih dapat dipelihara dan lebih baik untuk melakukan ini:
Di sini, saya memeriksa apakah karakter pertama dan terakhir dalam string adalah tanda kutip ganda. Jika ya, saya gunakan
substr
untuk memotong karakter pertama dan terakhir. String diindeks nol, jadi karakter terakhir adalahcharAt(str.length -1)
.substr
mengharapkan 2 argumen, di mana yang pertama adalah offset tempat substring dimulai, yang kedua adalah panjangnya. Karena kita tidak menginginkan char terakhir, lebih dari yang kita inginkan dulu, panjangnya adalahstr.length - 2
. Mudah sekali.Kiat :
Lebih lanjut tentang pernyataan lookaround dapat ditemukan di sini
Regex sangat berguna (dan IMO menyenangkan), dapat sedikit membingungkan pada awalnya. Berikut beberapa detail lainnya, dan tautan ke sumber daya tentang masalah ini.
Jika Anda belum terlalu nyaman menggunakan regex, Anda mungkin ingin mempertimbangkan untuk menggunakan:
Jika ada banyak kutipan dalam string, ini bahkan mungkin lebih cepat daripada menggunakan regex
sumber
Regexp ini hanya akan menghapus tanda kutip jika mereka adalah karakter pertama dan terakhir dari string. F.ex:
sumber
Jika string dijamin memiliki satu kutipan (atau karakter tunggal lainnya) di awal dan akhir yang ingin Anda hapus:
slice
memiliki overhead jauh lebih sedikit daripada ekspresi reguler.sumber
<uri>
dan literal suka"literal"
). Jadi inilah upvote. ;)Jika Anda memiliki kontrol atas data Anda dan Anda tahu tanda kutip ganda mengelilingi string (jadi jangan muncul di dalam string) dan string adalah bilangan bulat ... katakan dengan:
atau serupa ini dengan baik menghilangkan tanda kutip sekitarnya
Namun bukan jawaban universal yang apik untuk kebutuhan niche
sumber
JSON.parse("20151212211647278dfvs");
SyntaxError: Unexpected token d in JSON at position 17
Jika Anda hanya ingin menghapus kutipan batas:
Pendekatan ini tidak akan menyentuh string jika tidak terlihat
"text in quotes"
.sumber
a.charAt(x)
jika Anda menginginkan <ECMA5 support (f.ex IE7).Jika Anda hanya ingin menghapus tanda kutip dari awal atau akhir, gunakan persamaan reguler berikut:
sumber
"foo
danfoo"
. Seseorang mungkin hanya ingin menjatuhkan seluruh pasangan ini.Untuk menyatakan kembali masalah Anda dengan cara yang lebih mudah untuk diungkapkan sebagai ekspresi reguler:
Inilah regexp yang melakukan itu:
Merinci regexp:
^"?
pertandingan serakah untuk nol atau satu tanda kutip ganda terkemuka"?$
pertandingan serakah untuk nol atau satu tanda kutip ganda(.+?)
, yang akan mengandung target sebagai$1
.Ini akan kembali
delimited "string" here
untuk:sumber
Satu liner untuk orang-orang malas
sumber
/"/g
tidak akan bekerja untuk"My name is \"Jason\""
." - is a quote
string, jadi tidak sama dengan di sekitarIni bekerja...
sumber
'foo"
atau cukupfoo"
Ini mungkin bekerja untuk Anda.
sumber
Jika Anda ingin menghapus semua tanda kutip ganda dalam string, gunakan
Kalau tidak, Anda hanya ingin menghapus tanda kutip di sekitar string, gunakan:
sumber
Kode sederhana ini juga akan berfungsi, untuk menghapus misalnya kutipan ganda dari string yang dikelilingi dengan kutipan ganda:
sumber
Jika Anda mencoba menghapus tanda kutip ganda coba ikuti
sumber
kode ini sangat baik untuk menunjukkan nomor dalam kotak teks
$ (ini) = [kotak teks Anda]
sumber
Silakan coba ikuti regex untuk menghapus tanda kutip ganda dari string.
sumber