Як захопити підрядку перед вказаним символом jQuery або JavaScript


238

Я намагаюся витягнути все перед комою ",". Як це зробити в JavaScript або jQuery? Я спробував це і не працював ..

1345 albany street, Bellevue WA 42344

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

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

29
addy.split(',', 1)[0]
antak

Відповіді:


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

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

10
гойдалки та каруселі - це без потреби створює масив, але принаймні спрацьовує, якщо стоп-символ не є у рядку
Alnitak

2
Для порівняння продуктивності дивіться: jsperf.com/street-array-vs-substr
Goodbye StackExchange

2
попереднє посилання на коментар мертве: /
elki42

29

спробуйте це:

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

1
Чому немає любові до моєї відповіді? Якщо ця відповідь правильна stackoverflow.com/questions/3745515/…, моя відповідь така ж точна, як прийнята відповідь, і працює для запуску індексів, відмінних від 0.
Mikey G

8
Як вказував Девід Г вище, можливо, тому, що він не працює, якщо немає коми. ОП може означати, що в рядку завжди буде кома, але в багатьох випадках роздільник не гарантується. Дивіться jsfiddle.net/13pkp1xn
Bumpful Q Bangwhistle

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

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

Крім того, я рекомендую назвати свої змінні в регістрі верблюда (streetAddress) для кращої читабельності.


Це краще, ніж метод, що використовує indexof, у сценарії, коли немає символів кома
eyal_katz

2
Ви можете зберегти деякі обробки і зупинки розщеплення на першому «» знайти, використовуючи то , що @antak розміщені в якості коментаря в stackoverflow.com/a/22386366/601386 : addy.split(',', 1)[0]. Див. Розробник.mozilla.org/ en-US/ docs/ Web/JavaScript/ Reference/… .
грип

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

1
Чи не така відповідь точно така, як відповідь, опублікована 30 жовтня 2015 року?
kojow7

15

Якщо вам це подобається, просто скористайтеся RegExp :

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

4
+1, я вважаю, що це розумний метод, але я взяв підказку з цього і поїхавaddy.split(',', 1)[0]
antak

3
Цей метод дуже приємний, наприклад, якщо ви хочете розділити на простір: / [^ \ s] * /. Exec (...)
NuSkooler

12

майже те саме, що і у відповіді Девіда Г., але без анонімної функції, якщо ви не хочете включати її.

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

в цьому випадку ми використовуємо той факт, що другий аргумент substr- це довжина, і що ми знаємо, що наша підрядка починається з 0.

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

якщо ви хочете правильної поведінки в загальному випадку, використовуйте цей метод або метод Девіда Г., а не верхню відповідь

Методи регулярного вираження та спліт також працюватимуть, але можуть бути дещо повільнішими / надмірними для цієї конкретної проблеми.


8

Ви також можете використовувати shift().

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

Згідно з веб-документами MDN:

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.