Как получить подстроку перед указанным символом jQuery или JavaScript


238

Я пытаюсь извлечь все до запятой ','. Как мне сделать это в JavaScript или jQuery? Я попробовал это и не работает ..

1345 albany street, Bellevue WA 42344

Я просто хочу получить адрес улицы.

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

29
addy.split(',', 1)[0]
Антак

Ответы:


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

Хотя это не лучшее место для точной информации о том, что делает каждый метод ( лучше для этого подходит сеть разработчиков Mozilla ), сайт w3schools.com полезен для знакомства с синтаксисом.


22
Это не будет работать, если искомая строка не содержит экземпляр символа поиска. Он вернет пустую строку.
Дэвид Г

1
substrне рекомендуется; следует использовать substringвместо developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Бен

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

10
качели и карусели - он без необходимости создает массив, но по крайней мере работает, если символ остановки не находится в строке
Альнитак

2
Для сравнения производительности смотрите: jsperf.com/street-array-vs-substr
До свидания StackExchange

2
ссылка на предыдущий комментарий
неактивна

29

попробуй это:

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

1
Почему нет любви к моему ответу? Если этот ответ правильный, stackoverflow.com/questions/3745515/… мой ответ такой же точный, как и принятый ответ, и работает для начальных индексов, отличных от 0.
Mikey G

8
Как указывал Дэвид Г. выше, возможно, потому что это не работает, если нет запятой. OP может подразумевать, что строка всегда будет иметь запятую, но во многих случаях разделитель не гарантируется. См. Jsfiddle.net/13pkp1xn
Bumpious 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/601386 : addy.split(',', 1)[0]. См. Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
грипп

Используя деконструкцию массива, вы можете сделать: const [streetAddress,] = addy.split(','); Это полезно в тех случаях, когда вам нужно более одного значения, например: let [callerIdName, callerId] = callerIdString.split('<'); (исходный формат callerIdString - MCMULLIN, PARKER <+ 1XXXXXXXXXX>)
parker_codes

1
Разве этот ответ не совпадает с ответом, опубликованным 30 октября 2015 года?
Kojow7

15

Если вам это нравится, просто используйте RegExp :

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

4
+1, я думаю, что это разумный метод, но я addy.split(',', 1)[0]
понял

3
Этот метод очень полезен, например, если вы хотите разделить пробелы: / [^ \ s] * /. Exec (...)
NuSkooler

12

почти то же самое, что и ответ Дэвида Г., но без анонимной функции, если вы не хотите включать ее.

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

в этом случае мы используем тот факт, что второй аргумент substr- это длина, и мы знаем, что наша подстрока начинается с 0.

верхний ответ не является общим решением из-за нежелательного поведения, если строка не содержит искомого символа.

если вам нужно правильное поведение в общем случае, используйте этот метод или метод Дэвида Г., а не верхний ответ

Методы 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-9и может встречаться от нуля или более раз, так как иногда это число только одна цифра, а затем оно соответствует пробелу. [a-zA-Z]в основном сопоставляет все заглавные буквы строчными буквами и должен встречаться один или несколько раз, и это повторяется.


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

Результат : мы идем к

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.