如何在指定字符 jQuery 或 JavaScript 之前抓取子字符串
Posted
技术标签:
【中文标题】如何在指定字符 jQuery 或 JavaScript 之前抓取子字符串【英文标题】:How to grab substring before a specified character jQuery or JavaScript 【发布时间】:2012-02-26 08:00:28 【问题描述】:我正在尝试提取“,”逗号之前的所有内容。如何在 javascript 或 jQuery 中执行此操作?我试过了,但不工作..
1345 albany street, Bellevue WA 42344
我只想获取街道地址。
var streetaddress= substr(addy, 0, index(addy, '.'));
【问题讨论】:
addy.split(',', 1)[0]
【参考方案1】:
var streetaddress= addy.substr(0, addy.indexOf(','));
虽然它不是获得每种方法作用的确切信息的最佳位置(mozilla developer network 更好)w3schools.com 适合向您介绍语法。
【讨论】:
如果正在搜索的字符串不包含搜索字符的实例,这将不起作用。它将返回一个空字符串。substr
不推荐;应该使用substring
而不是developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…【参考方案2】:
var streetaddress = addy.split(',')[0];
【讨论】:
秋千和环形交叉路口 - 它不必要地创建了一个数组,但如果停止字符不在字符串中,它至少可以工作 性能对比见:jsperf.com/street-array-vs-substr 上一条评论链接已失效:/【参考方案3】:试试这个:
streetaddress.substring(0, streetaddress.indexOf(','));
【讨论】:
为什么不喜欢我的回答?如果这个答案是正确的***.com/questions/3745515/… 我的答案与接受的答案一样准确,并且适用于 0 以外的起始索引。 正如上面David G所指出的,可能是因为如果没有逗号,它就不起作用。 OP 可能暗示该字符串总是有一个逗号,但在许多情况下,不能保证分隔符。见jsfiddle.net/13pkp1xn【参考方案4】://split string into an array and grab the first item
var streetaddress = addy.split(',')[0];
另外,我建议您使用 camel-case(streetAddress) 命名变量以提高可读性。
【讨论】:
这个比使用indexof的方法好,在没有逗号的场景下 您可以使用@antak 在***.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 )
这个答案不是和 2015 年 10 月 30 日发布的答案完全一样吗?【参考方案5】:
如果您喜欢简短,只需使用RegExp:
var streetAddress = /[^,]*/.exec(addy)[0];
【讨论】:
+1,我认为这是一个合理的方法,但我从中得到了提示并选择了addy.split(',', 1)[0]
这个方法非常好,例如如果你想在空白处分割:/[^\s]*/.exec(...)
当删除子字符串不一定存在时:streetAddress = addy.replace(/,.*$/, '');
,这会删除第一个匹配项(,
)之后的所有内容,前提是它存在【参考方案6】:
与 David G 的答案几乎相同,但没有匿名功能,如果您不想包含一个。
s = s.substr(0, s.indexOf(',') === -1 ? s.length : s.indexOf(','));
在这种情况下,我们利用 substr
的第二个参数是一个长度这一事实,并且我们知道我们的子字符串从 0 开始。
最佳答案是不是通用解决方案,因为如果字符串不包含您要查找的字符,则会出现不良行为。
如果您想在一般情况下正确行为,请使用此方法或 David G 的方法,而不是最佳答案
regex 和 split 方法也可以工作,但对于这个特定问题可能会有点慢/过大。
【讨论】:
【参考方案7】:您也可以使用shift()
。
var streetaddress = addy.split(',').shift();
根据 MDN 网络文档:
shift()
方法从数组中移除 first 元素并返回该移除的元素。这个方法改变了数组的长度。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
【讨论】:
使用 [0] 索引比使用 .shift() 更有效【参考方案8】:var streetaddress = addy.substr(0, addy.indexOf('.'));
(你应该通读javascript tutorial,尤其是关于String functions的部分)
【讨论】:
【参考方案9】:var newString = string.substr(0,string.indexOf(','));
【讨论】:
【参考方案10】:如果你想返回不包含搜索字符的原始字符串,那么你可以使用匿名函数(闭包):
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,',');
【讨论】:
【参考方案11】:您可以使用正则表达式,因为如果它符合要求,它将为您提供字符串。代码类似于:
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]
基本上将所有大写字母与小写字母匹配,并且必须出现一次或多次并且重复。
【讨论】:
以上是关于如何在指定字符 jQuery 或 JavaScript 之前抓取子字符串的主要内容,如果未能解决你的问题,请参考以下文章