如何在JavaScript中抓取指定字符之前的子字符串?

问题描述 投票:0回答:13

我正在尝试提取“,”逗号之前的所有内容。如何在 JavaScript 或 jQuery 中执行此操作?我尝试过这个但不起作用..

1345 albany street, Bellevue WA 42344

我只想获取街道地址。

var streetaddress= substr(addy, 0, index(addy, '.')); 
javascript substring substr
13个回答
582
投票
const streetAddress = addy.substring(0, addy.indexOf(","));

虽然它不是获取有关每种方法用途的明确信息的最佳位置(MDN Web Docs 更适合)W3Schools.com 非常适合向您介绍语法。


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

47
投票

试试这个:

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

41
投票
//split string into an array and grab the first item

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

此外,我建议使用驼峰式命名(streetAddress)来命名变量,以提高可读性。


22
投票

如果您喜欢简短,只需使用RegExp

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

21
投票

您还可以使用

shift()

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

根据 MDN Web 文档:

shift()
方法从数组中删除 first 元素并返回该删除的元素。此方法更改数组的长度。

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


13
投票

与 David G 的答案几乎相同,但没有匿名函数(如果您不想添加)。

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

在这种情况下,我们利用了

substr
的第二个参数是长度这一事实,并且我们知道我们的子字符串从 0 开始。

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

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

正则表达式和分割方法也可以工作,但对于这个特定问题可能会有点慢/过度杀伤力。


9
投票
var newString = string.substr(0,string.indexOf(','));

8
投票
var streetaddress = addy.substr(0, addy.indexOf('.')); 

(您应该阅读javascript教程,尤其是关于字符串函数的部分)


2
投票

如果您想返回不包含搜索字符的原始字符串,那么您可以使用匿名函数(闭包):

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
投票

根据 ESLint 规则 prefer-string-slice,这是我使用

slice()
 :

的实现
function getStreetAddress(str: string, separator = ','): string {
  const separatorIndex = path.indexOf(separator);

  return separatorIndex === -1 ? str : str.slice(0, separatorIndex);
}

如果未找到分隔符,则返回整个字符串。

值得一提的是,因为您似乎正在尝试解析一种 CSV 文件行,所以此代码可能适用于您的情况,但当街道地址包含特殊字符或分隔符本身时则不起作用(

,
)。为此,CSV 文件中的字段可能会用引号引起来,在此简单的实现中不会处理这一点。


-1
投票

如果你担心发现没有逗号的情况,你可以这样做:

let end = addy.indexOf(",") >= 0 ? addy.indexOf(",") : addy.length;
let streetaddress = addy.substr(0, end);

没有人说它必须在一根线上进行。

© www.soinside.com 2019 - 2024. All rights reserved.