特定のキャラクターの後のすべてを削除する


280

特定のキャラクターの後のすべてを削除する方法、またはそのキャラクターまでのすべてを選択する方法はありますか?私はhrefから "?"までの値を取得していますが、常に異なる文字数になります。

このような

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

href /Controller/Actionのみにしたいので、「?」以降のすべてを削除します。

私は今これを使っています:

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

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

     console.log(url);
 }

回答:


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

ここにサンプル

また、ネイティブ文字列関数は、正規表現よりもはるかに高速であることにも言及する必要があります。正規表現は、必要な場合にのみ実際に使用する必要があります(これはこれらのケースの1つではありません)。

「?」を含まないようにコードを更新しました:

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

ここにサンプル


15
このスパゲッティコードは最良の答えではありません。スプリットメソッドの回答を見る
LastTribunal 2017

1
LoL-どういうわけか、正規表現を理解していない人や、splitがどのように機能するかが投票権を得ました。Stringメソッドを理解するだけで十分です。物事がどのように機能するかを理解し、最大のコードが世界を支配する:Pそこで、分割された回答に段階的な説明を追加しました(世界を変更するため)。

1
LoL-スプリットは正規表現を受け入れることができるので、スプリットを使用しない場合は+1ですか?LoL-Javascriptは正規表現を使用するので、JavaScriptを使用しない場合は+1になりますか?より多くのコードと複雑さにより、どのようにそれを単純なタスクにすることができますか?正規表現と分割の両方がより単純でより効果的ではありませんか?

293

split()関数を使用することもできます。これは私の頭に浮かぶ最も簡単な方法のようです:)。

url.split('?')[0]

jsFiddleデモ

1つの利点は?、文字列に何もない場合でもこのメソッドが機能することです。文字列全体が返されます。


1
[0]はこの状況で何をしますか?
Dejan.S

13
split配列を返し(この場合は2つの要素、0および1)、[0]返された配列の最初の要素を取得します。
kapa

41
+1、これの最も良い点は、「?」がない場合でも常に機能することです。
ケビン

「\」を分割したい場合はどうすればよいですか?
anud33p

1
この回答が大好きです。シンプルでありながら、あなたに与える効果は本当に強力です
Richlewis

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

これは「?」が見つかった場合に機能します。そうでない場合


これは単に「?」を削除します そして、OPの他の何人かは要求しませんでした
ケビン

4
これにより、?(含まれる)以降のすべてが削除されます
mcont

2
最高の答え!OPはすべてを削除するよう要求し、?次のように削除すること?も明確に述べています:hrefを/ Controller / Actionのみにしたい

3

「?」もつけておきたいなら その特定の文字の後のすべて削除するだけで、次のことができます。

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

// output: /Controller/Action?

文字列にaが含まれていない場合、これは機能しません?
Stephan Bijzitter

@StephanBijzitterはい、知っています。私の答えが言うので:「も保持したいですか?」-保持する文字列に疑問符が必要です..
patad

奇妙なことに、私のコメントは@Imranによる他の回答のためのものだったようです。なぜ私があなたの答えに投稿したのか分かりません。
Stephan Bijzitter

1

非常に遅いパーティーかもしれません:p

後方参照$ 'を使用できます

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

それは私にとってとてもうまくいきます:

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

0

私のために働いた:

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

-2

参考のためにJavaScriptを使用して簡単に行うことができますリンクを参照してください JS文字列

編集は簡単に行うことができます。;)

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.