Как получить подстроку перед указанным символом 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 полезен для знакомства с синтаксисом.

wheresrhys
источник
22
Это не будет работать, если искомая строка не содержит экземпляр символа поиска. Он вернет пустую строку.
Дэвид Г
1
substrне рекомендуется; следует использовать substringвместо developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Бен
153
var streetaddress = addy.split(',')[0];
user3336882
источник
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,',');
Дэвид Г
источник
4
var newString = string.substr(0,string.indexOf(','));
Gaurav
источник
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]в основном сопоставляет все заглавные буквы строчными буквами и должен встречаться один или несколько раз, и это повторяется.

Ramen_Lover912
источник
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')

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

кибернетический
источник