Saya tidak pandai memanipulasi string di JavaScript, dan saya bertanya-tanya bagaimana Anda akan mempersingkat string tanpa memotong kata apa pun. Saya tahu cara menggunakan substring, tetapi tidak dengan indexOf atau apa pun dengan sangat baik.
Katakanlah saya memiliki string berikut:
text = "this is a long string I cant display"
Saya ingin memangkasnya menjadi 10 karakter, tetapi jika tidak diakhiri dengan spasi, selesaikan kata. Saya tidak ingin variabel string terlihat seperti ini:
"ini adalah string panjang yang tidak bisa aku lepaskan"
Saya ingin menyelesaikan kata sampai spasi muncul.
javascript
string
substring
Josh Bedo
sumber
sumber
" too many spaces ".trim()
Jawaban:
Jika saya mengerti dengan benar, Anda ingin memperpendek string dengan panjang tertentu (mis. Memperpendek
"The quick brown fox jumps over the lazy dog"
menjadi, katakanlah, 6 karakter tanpa memotong kata apa pun).Jika ini masalahnya, Anda dapat mencoba sesuatu seperti berikut:
sumber
maxLength + 1
), tetapi saya memperbaikinya hanya dengan menambahkan baris ini di bagian atas:var yourString += " ";
fox jumps over the lazy dog
bagian, hasilnya akanThe quick brown
seperti yang seharusnyaThe quick brown fox
.Ada banyak cara untuk melakukannya, tetapi ekspresi reguler adalah metode satu baris yang berguna:
Ekspresi ini mengembalikan 11 karakter pertama (apa saja) ditambah karakter non-spasi berikutnya.
Contoh skrip:
Keluaran:
sumber
t.replace(new RegExp("^(.{"+length+"}[^\s]*).*"), "$1")
{30}
Saya agak terkejut bahwa untuk soal sederhana seperti ini banyak sekali jawaban yang sulit untuk dibaca dan beberapa, termasuk yang terpilih, tidak berhasil.
Saya biasanya ingin string hasil paling banyak
maxLen
karakter. Saya juga menggunakan fungsi yang sama ini untuk mempersingkat siput di URL.str.lastIndexOf(searchValue[, fromIndex])
mengambil parameter kedua yaitu indeks di mana untuk mulai mencari mundur dalam string membuat semuanya efisien dan sederhana.Ini adalah contoh keluaran:
Dan untuk siput:
sumber
str
adalahundefined
. Saya menambahkanif (!str || str.length <= maxLen) return str;
str.length <= maxLen
. Jika tidak, ia mengembalikan string kosong.Semua orang sepertinya lupa bahwa indexOf membutuhkan dua argumen- string untuk dicocokkan, dan indeks karakter untuk mulai mencari. Anda dapat memutuskan string di spasi pertama setelah 10 karakter.
sumber
Lodash memiliki fungsi yang khusus ditulis untuk ini:
_.truncate
sumber
Berdasarkan jawaban NT3RP yang tidak menangani beberapa kasus sudut, saya telah membuat kode ini. Ini menjamin untuk tidak mengembalikan teks dengan event size> maxLength, elipsis
...
ditambahkan di akhir.Ini juga menangani beberapa kasus sudut seperti teks yang memiliki satu kata menjadi> maxLength
Saya kira Anda dapat dengan mudah menghapus ketergantungan jquery jika ini mengganggu Anda.
sumber
$.extend
harus dibalik?Inilah solusi dalam satu baris.
sumber
Saya terlambat ke pesta, tetapi berikut adalah solusi kecil dan mudah yang saya buat untuk mengembalikan sejumlah kata.
Ini tidak secara langsung terkait dengan kebutuhan karakter Anda , tetapi melayani hasil yang sama seperti yang saya yakin Anda kejar.
Lihat contoh yang berfungsi di sini: https://jsfiddle.net/bx7rojgL/
sumber
Ini mengecualikan kata terakhir alih-alih menyertakannya.
Pemakaian:
sumber
Saya mengambil pendekatan yang berbeda. Meskipun saya membutuhkan hasil yang serupa, saya ingin menjaga nilai pengembalian saya kurang dari panjang yang ditentukan.
Sunting Saya merefaktornya sedikit di sini: Contoh JSFiddle . Ini bergabung kembali dengan array asli alih-alih menggabungkan.
sumber
Tampilkan cuplikan kode
sumber
Anda dapat menggunakan
truncate
satu baris di bawah ini:sumber
}
var s = "ini adalah string yang panjang dan saya tidak bisa menjelaskan semuanya"; persingkat (s, 10, '...')
/* "ini adalah .." */
sumber
Ini adalah potongan kode lain yang terpotong di sepanjang tanda baca (sedang mencari ini dan Google menemukan pertanyaan ini di sini). Harus menemukan solusi sendiri, jadi inilah yang saya retas dalam 15 menit. Menemukan semua kemunculan. ! ? dan memotong di setiap posisi ini yang <dari
len
sumber
Ketikan, dan dengan elipsis :)
sumber
Untuk apa itu layak saya menulis ini untuk memotong ke batas kata tanpa meninggalkan tanda baca atau spasi di akhir string:
sumber
Tidak menemukan solusi yang dipilih memuaskan. Jadi saya menulis sesuatu yang agak umum dan berfungsi baik bagian pertama dan terakhir teks Anda (seperti substr tetapi untuk kata-kata). Anda juga dapat mengatur apakah Anda ingin spasi ditinggalkan dalam hitungan karakter.
sumber
Saya datang terlambat untuk ini tetapi saya pikir fungsi ini membuat persis apa yang diminta OP. Anda dapat dengan mudah mengubah nilai KALIMAT dan LIMIT untuk hasil yang berbeda.
Output dari cuplikan ini adalah dengan LIMITnya 11 adalah:
sumber
Dengan syarat batas seperti kalimat kosong dan kata pertama sangat panjang. Juga, ia tidak menggunakan api / perpustakaan string khusus bahasa.
sumber
'Pasta dengan tomat dan bayam'
jika Anda tidak ingin memotong kata menjadi dua
iterasi pertama:
acc: 0 / acc + cur.length = 5 / newTitle = ['Pasta'];
iterasi kedua:
acc: 5 / acc + cur.length = 9 / newTitle = ['Pasta', 'with'];
iterasi ketiga:
acc: 9 / acc + cur.length = 15 / newTitle = ['Pasta', 'with', 'tomato'];
iterasi keempat:
acc: 15 / acc + cur.length = 18 (batas terikat) / newTitle = ['Pasta', 'with', 'tomato'];
keluaran: Pasta dengan tomat ...
sumber
Anda dapat memangkas spasi dengan ini:
sumber
Diperbarui dari @ NT3RP Saya menemukan bahwa jika string kebetulan mengenai spasi pertama kali di sekitarnya akan berakhir dengan menghapus kata itu membuat string Anda satu kata lebih pendek dari yang seharusnya. Jadi saya hanya memasukkan pernyataan if else untuk memeriksa bahwa maxLength tidak jatuh pada spasi.
codepen.io
sumber