Belirli bir karakterden sonra her şeyi kaldır


281

Belirli bir karakterden sonra her şeyi kaldırmanın ya da sadece o karaktere kadar her şeyi seçmenin bir yolu var mı? Ben bir href ve "?" Kadar değer alıyorum, ve her zaman farklı miktarda karakter olacak.

Bunun gibi

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

Ben href /Controller/Actionsadece olmasını istiyorum, bu yüzden "?" Sonra her şeyi kaldırmak istiyorum.

Bunu şimdi kullanıyorum:

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

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

     console.log(url);
 }

Yanıtlar:


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

Buradan örnek alın

Ayrıca yerel dize işlevleri, yalnızca gerçekten gerektiğinde kullanılması gereken normal ifadelerden çok daha hızlı olduğunu belirtmeliyim (bu durumlardan biri değil).

'?' Hesabının hesabında kod güncellendi:

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

Buradan örnek alın


15
bu spagetti kodu en iyi cevap olmamalıdır. bölünmüş yöntem cevabına bakınız
LastTribunal

1
LoL - Bir şekilde regex'i ve bölünmüş işlerin oy yetkilerini nasıl aldığını anlayamıyorlar. String yöntemlerini anlamak yeterlidir. İşlerin nasıl çalıştığını en az anlayan ve en büyük kod dünyayı yöneten: P Bu yüzden bölünmüş cevaba (wolrd'u değiştirmek için) adım adım bir açıklama ekledim.

1
LoL - Split normal ifadeyi kabul edebilir, bu nedenle +1 split kullanmaz mı? Javascript Javascript kullanarak değil regex so +1 kullanın? Daha fazla kod ve karmaşıklık onu nasıl basit bir görev haline getirebilir? Hem normal ifade hem de bölünme daha basit ve daha etkili değil mi?

294

split()İşlevi de kullanabilirsiniz . Bu aklıma gelen en kolay gibi görünüyor :).

url.split('?')[0]

jsFiddle Demosu

Bir avantaj, bu yöntem ?dizede hiç olmasa bile çalışacaktır - tüm dizeyi döndürecektir.


1
[0] bu durumda ne yapar?
Dejan.S

13
splitbir dizi döndürür (bu durumda iki öğesi vardır 0ve 1) ve [0]döndürülen dizinin ilk öğesini alır.
kapa

41
+1, bununla ilgili en iyi şey, '?' Olmasa bile her zaman işe yaramasıdır.
Kevin

'\' yi bölmek istiyorsak ne yapmalıyız?
anud33p

1
Bu cevabı seviyorum, size ne verdiğinde çok basit ve gerçekten güçlü
Richlewis

19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

Bir '?' Bulursa bu işe yarar. ve eğer yapmazsa


bu sadece '?' ve bazıları OP için sormadı
Kevin

4
Bu, ?(dahil) sonra her şeyi kaldıracak
mcont

2
EN İYİ CEVAP ! OP sonra her ?şeyi kaldırmak istedi ve açıkça ?söyleyerek kaldırmak için açıkça belirtildi : Ben href olmak istiyorum / Denetleyici / Sadece eylem

3

Ayrıca "?" ve sadece bu karakterden sonra her şeyi kaldırın , şunları yapabilirsiniz:

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

// output: /Controller/Action?

Dize bir?
Stephan Bijzitter

@StephanBijzitter Evet biliyorum. Cevabım der yana: "eğer siz de tutmak istiyorum ? " - besbelli .. tutmak için dizede bir soru işareti olmalı
patad

Garip, yorumum @Imran'ın diğer cevabı için yapılmış gibi görünüyor. Cevabınıza neden gönderdiğimi bilmiyorum.
Stephan Bijzitter

1

Çok geç parti olabilir: p

Arka referans $ 'kullanabilirsiniz

$' - 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)


1

Benim için çok güzel çalışıyor:

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

0

Benim için çalıştı:

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

-1

Kolayca referans için JavaScript kullanarak yapılabilir bağlantı JS String bakın

DÜZENLE kolayca yapılabilir. ;)

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.