指定された文字jQueryまたはJavaScriptの前に部分文字列を取得する方法


237

「、」コンマの前のすべてを抽出しようとしています。JavaScriptまたはjQueryでこれを行うにはどうすればよいですか?私はこれを試してみましたが、うまくいきませんでした。

1345 albany street, Bellevue WA 42344

番地を取得したいだけです。

var streetaddress= substr(addy, 0, index(addy, '.')); 

29
addy.split(',', 1)[0]
アンタック2014

回答:


404
var streetaddress= addy.substr(0, addy.indexOf(',')); 

これは、各メソッドの動作に関する明確な情報を提供するのに最適な場所ではありませんが(mozilla開発者ネットワークの方が適しています)、w3schools.comは構文を紹介するのに適しています。


22
検索される文字列に検索文字のインスタンスが含まれていない場合、これは機能しません。空の文字列を返します。
David G

1
substr推奨されません。substring代わりにdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ben Creasy


29

これを試して:

streetaddress.substring(0, streetaddress.indexOf(','));

1
なぜ私の答えに愛情がないのですか?この答えが正しい場合stackoverflow.com/questions/3745515/...私の答えは受け入れ答えとして正確なようで、0以外のインデックスを開始するための作品
マイキーG

8
上記のDavid Gが指摘したように、おそらくカンマがないと機能しないためです。OPは、文字列には常にコンマが含まれることを示唆している可能性がありますが、多くの場合、区切り文字は保証されていません。jsfiddle.net/13pkp1xnを
Bumptious Q Bangwhistle

22
//split string into an array and grab the first item

var streetaddress = addy.split(',')[0];

また、読みやすくするために、変数にcamel-case(streetAddress)の名前を付けることをお勧めします。


これは、カンマ文字がないシナリオでは、indexofを使用する方法よりも優れています
eyal_katz

2
あなたが最初にいくつかの処理やストップ分割を保存することができます「」でコメントとして投稿@antakものを使用していstackoverflow.com/a/22386366/601386addy.split(',', 1)[0]developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…を参照してください。
2017年

配列の分解を使用すると、次のことができます。const [streetAddress,] = addy.split(','); これは、次のような複数の値が必要な場合に役立ちますlet [callerIdName, callerId] = callerIdString.split('<'); (元のcallerIdString形式はMCMULLIN、PARKER <+ 1XXXXXXXXXX>)
parker_codes

この回答は、2015年10月30日に投稿された回答とまったく同じではありませんか?
kojow7

15

短くしたい場合は、単にRegExpを使用してください:

var streetAddress = /[^,]*/.exec(addy)[0];

4
+1、これは妥当な方法だと思いますが、私はこれからヒントを得て、一緒に行きましたaddy.split(',', 1)[0]
antak '

3
あなたは空白に分割したい場合は、この方法は、例えば非常にいいです:/ [^ \ s]と* / EXEC(...)。
NuSkooler

12

David Gの回答とほぼ同じですが、無名関数を含めないでください。

s = s.substr(0, s.indexOf(',') === -1 ? s.length : s.indexOf(','));

この場合、2番目の引数がsubstr長さであり、部分文字列が0から始まることがわかっているという事実を利用します。

探している文字が文字列に含まれていない場合の望ましくない動作のため、上の答えは一般的な解決策ではありません。

一般的なケースで正しい動作が必要な場合は、トップの答えではなく、このメソッドまたはDavid Gのメソッドを使用してください

regexとsplitのメソッドも機能しますが、この特定の問題については多少遅くなる/やり過ぎる可能性があります。


8

も使用できますshift()

var streetaddress = addy.split(',').shift();

MDN Web Docsによると:

このshift()メソッドは、配列から最初の要素を削除し、削除された要素を返します。このメソッドは、配列の長さを変更します。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift


[0]を使用したインデックス作成は、.shift()を使用するよりも効率的です
MysteryPancake


4

検索文字が含まれていない場合に元の文字列をそのまま返したい場合は、無名関数(クロージャー)を使用できます。

var streetaddress=(function(s){var i=s.indexOf(',');
   return i==-1 ? s : s.substr(0,i);})(addy);

これはより一般的にすることができます:

var streetaddress=(function(s,c){var i=s.indexOf(c);
   return i==-1 ? s : s.substr(0,i);})(addy,',');


2

正規表現を使用すると、要件に一致した場合に文字列が得られます。コードは次のようになります。

const address = "1345 albany street, Bellevue WA 42344";
const regex = /[1-9][0-9]* [a-zA-Z]+ [a-zA-Z]+/;
const matchedResult = address.match(regex);

console.log(matchedResult[0]); // This will give you 1345 albany street.

したがって、コードを分解します。[1-9][0-9]*基本的に、最初の数値はゼロにすることはできず1-9、次の数値は0-90 からの任意の数値にすることができ、ゼロまたはそれ以上発生する可能性があることを意味します。[a-zA-Z]基本的にすべての大文字を小文字に一致させ、1回以上発生する必要があり、これが繰り返されます。


0

Azleを使用して、に部分文字列を取得できます。

str = 'This is how we go to the place!'

az.get_everything_before(str, 'place')

結果:これは私たちが行く方法です

str = 'This is how we go to the place!'

az.get_everything_after(str, 'go')

結果:その場へ!

との

str = 'This is how we go to the place!'

az.get_everything_between(str, 'how', 'place')

結果:私たちは

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