Hapus semuanya setelah karakter tertentu

281

Apakah ada cara untuk menghapus semuanya setelah karakter tertentu atau hanya memilih semuanya hingga karakter itu? Saya mendapatkan nilai dari href dan hingga "?", Dan itu akan selalu menjadi jumlah karakter yang berbeda.

Seperti ini

/Controller/Action?id=11112&value=4444

Saya ingin href /Controller/Actionhanya menjadi , jadi saya ingin menghapus semuanya setelah "?".

Saya menggunakan ini sekarang:

 $('.Delete').click(function (e) {
     e.preventDefault();

     var id = $(this).parents('tr:first').attr('id');                
     var url = $(this).attr('href');

     console.log(url);
 }
Dejan.S
sumber

Jawaban:

468
var s = '/Controller/Action?id=11112&value=4444';
s = s.substring(0, s.indexOf('?'));
document.write(s);

Contoh di sini

Saya juga harus menyebutkan bahwa fungsi string asli jauh lebih cepat daripada ekspresi reguler, yang seharusnya hanya benar-benar digunakan ketika diperlukan (ini bukan salah satu dari kasus tersebut).

Kode yang diperbarui ke akun tanpa '?':

var s = '/Controller/Action';
var n = s.indexOf('?');
s = s.substring(0, n != -1 ? n : s.length);
document.write(s);

Contoh di sini

Demian Brecht
sumber
15
kode spageti ini seharusnya bukan jawaban terbaik. lihat jawaban metode split
LastTribunal
1
LoL - Entah bagaimana mereka yang tidak mengerti regex dan bagaimana split bekerja mendapatkan kekuatan suara Memahami metode String sudah cukup. Paling tidak memahami cara kerja dan aturan kode terbesar di dunia: P Jadi saya menambahkan penjelasan langkah demi langkah ke jawaban split (untuk mengubah wolrd).
1
LoL - Split dapat menerima regex jadi +1 untuk tidak menggunakan split? LoL - Javascript menggunakan regex jadi +1 karena tidak menggunakan Javascript? Bagaimana bisa lebih banyak kode dan kompleksitas membuatnya menjadi tugas yang sederhana? Bukankah regex dan split lebih sederhana dan lebih efektif?
294

Anda juga dapat menggunakan split()fungsi ini. Ini sepertinya yang paling mudah terlintas di benak saya :).

url.split('?')[0]

Demo jsFiddle

Salah satu keuntungannya adalah metode ini akan bekerja bahkan jika tidak ada ?dalam string - itu akan mengembalikan seluruh string.

kapa
sumber
1
apa yang dilakukan [0] dalam situasi ini?
Dejan.S
13
splitmengembalikan array (dalam hal ini memiliki dua elemen, 0dan 1), dan [0]mendapatkan elemen pertama dari array yang dikembalikan.
kapa
41
+1, hal terbaik tentang ini adalah selalu berfungsi, meskipun tidak ada '?'
Kevin
apa yang harus kita lakukan jika kita ingin membagi '\'?
anud33p
1
Cintai jawaban ini, sangat sederhana namun sangat kuat dalam apa yang diberikannya kepada Anda
Richlewis
19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Ini akan berfungsi jika menemukan '?' dan jika tidak

James Kyburz
sumber
ini hanya akan menghapus '?' dan beberapa lainnya ke OP tidak meminta
Kevin
4
Ini akan menghapus semuanya setelah ?(termasuk)
mcont
2
JAWABAN TERBAIK ! OP meminta untuk menghapus SEMUA setelah ?dan dengan jelas menyatakan untuk menghapus ?juga dengan mengatakan: Saya ingin href menjadi / Controller / Action saja
3

Jika Anda juga ingin tetap "?" dan cukup hapus semuanya setelah karakter tertentu, Anda dapat melakukan:

var str = "/Controller/Action?id=11112&value=4444",
    stripped = str.substring(0, str.indexOf('?') + '?'.length);

// output: /Controller/Action?
patad
sumber
Ini tidak berfungsi jika string tidak mengandung?
Stephan Bijzitter
@StephanBijzitter Ya saya tahu. Karena jawaban saya mengatakan: "jika Anda juga ingin menyimpan ? " - jelas harus ada tanda tanya dalam string untuk menjaga ..
patad
Aneh, sepertinya komentar saya ditujukan untuk jawaban lain oleh @Imran. Tidak tahu mengapa saya mempostingnya di jawaban Anda.
Stephan Bijzitter
1

Mungkin pesta sangat terlambat: hlm

Anda dapat menggunakan referensi belakang $ '

$' - Inserts the portion of the string that follows the matched substring.

let str = "/Controller/Action?id=11112&value=4444"

let output = str.replace(/\?.+/g,"$'")

console.log(output)

Code Maniac
sumber
1

Ini bekerja dengan baik untuk saya:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);
Samina Samina
sumber
0

Bekerja untuk saya:

      var first = regexLabelOut.replace(/,.*/g, "");

sumber
-1

Ini dapat dengan mudah dilakukan menggunakan JavaScript untuk referensi lihat tautan JS String

EDIT dapat dengan mudah dilakukan. ;)

var url="/Controller/Action?id=11112&value=4444 ";
var parameter_Start_index=url.indexOf('?');
var action_URL = url.substring(0, parameter_Start_index);
alert('action_URL : '+action_URL);
Imran
sumber