如何在指定字符jQuery或JavaScript之前获取子字符串


237

我正在尝试提取逗号之前的所有内容。如何在JavaScript或jQuery中做到这一点?我尝试了这个,但是没有用..

1345 albany street, Bellevue WA 42344

我只想抢街道地址。

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

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

Answers:


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/...
奔折皱


29

试试这个:

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

1
为什么不爱我的答案?如果这个答案是正确的stackoverflow.com/questions/3745515/...我的回答是准确的,因为接受的答案,以及工程启动0以外的指标
米奇摹

8
正如上面的David G指出的那样,可能是因为如果没有逗号,它就无法工作。OP可能暗示该字符串将始终带有逗号,但是在许多情况下,不能保证定界符。参见jsfiddle.net/13pkp1xn
精彩的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
这个答案与2015年10月30日发布的答案不完全相同吗?
kojow7

15

如果您喜欢它,可以简单地使用RegExp

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

4
+1,我认为这是一种合理的方法,但是我从中得到了提示,然后选择了addy.split(',', 1)[0]
antak 2014年

3
例如,如果您想在空白处分割,此方法非常好:/ [^ \ s] *
/。exec(...)– NuSkooler

12

与David G的答案几乎相同,但没有匿名功能(如果您不希望包含匿名功能)。

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

在这种情况下,我们利用以下事实:of的第二个参数substr是一个长度,并且我们知道我们的子字符串从0开始。

最好的答案不是通用的解决方案,因为如果字符串不包含您要查找的字符,则会出现不良的行为。

如果要在一般情况下采取正确的行为,请使用此方法或David G的方法,而不是最佳答案

正则表达式和拆分方法也可以使用,但是对于此特定问题可能会比较慢/过大。




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

您可以使用regex,因为如果符合要求,它将为您提供字符串。该代码将类似于:

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

结果:我们转到

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.