我有一些字符串;他们可以是,例如:
1. artist_submission_design&IDshow=79025 OR
2. artist_design&IDshow=102 OR
3. status_design_001&IDshow=1
如何在“&”之后删除所有内容使用javascript或jQuery?
以下是我的尝试:
var newxx = xx.replace("&IDshow=", "");
但它不起作用,因为=
之后的数字可能会有所不同,所以我不知道如何处理它。
答案 0 :(得分:8)
有几种方法可以删除字符串的最后一部分。所有这些都有利有弊。
假设我们有这个字符串:
var myString = "artist_submission_design&IDshow=79025";
<强>替换强>
字符串对象的replace - 方法用另一个字符串替换字符串的一部分它需要两个参数。第一个是字符串或正则表达式,用于描述应该替换的字符串的哪个部分。第二个参数用于替换匹配的内容。它可以是字符串或函数。
在下面的示例中,匹配是使用与&
- 字符匹配的正则表达式以及之后的每个字符,匹配将替换为空字符串。
var result = myString.replace(/&.*/,"");
正则表达式很灵活,您可以进行复杂的模式匹配。但执行起来可能会很慢。
<强>分割强>
字符串对象的split - 方法在一个或多个字符串中分割字符串,并返回包含字符串的数组。它需要一两个参数。第一个是分隔符,它应该拆分的字符串。它可以是单个字符或多字符str ING。第二个参数 limit 是可选的,并限制将在数组中返回的字符串数。如果在输入字符串中重复分隔符,则很重要。例如&#34; songname&amp; artist = name&amp; album = album&amp; label = label&#34;如果分隔符为&#34;&amp;&#34;,则返回一个包含4个字符串的数组。如果您只对第一个字符串感兴趣,则没有理由获得包含多个字符串的数组。
在下面的示例中,myString在每个&
上拆分,但我们将其限制为一个字符串。而且由于split返回一个数组,我们只对数组的第一个元素感兴趣,我得到了[0]
数组的第一个元素(在javascript中,数组的索引是从零开始的)。
var result= myString.split('&',1)[0];
如果字符串应该分成几个字符串,那么 split
可以快速使用。
<强>子强>
字符串对象的substring - 方法返回字符串的一部分。它可以与indexOf(搜索指定的字符串)一起使用,以确定应该返回的字符串的哪个部分。这种方法由Jay Blanchard提出。如果找不到搜索到的字符串,indexOf
将返回-1。由于我们在这种情况下需要整个字符串,我们必须测试该情况并调整结束位置。
var pos = myString.indexOf('&');
if ( pos < 0 ) pos = myString.length;
var result = myString.substring(0, pos);
虽然输入的内容多一点,但在所有经过测试的浏览器中,性能都很棒。
我应该使用哪一个?
这取决于您正在做什么,以及您正在处理多少数据。 cr0ss确实在jsperf上设置了效果测试。我添加了更多tests,后来甚至添加了更多数据more tests。最新测试是在同一台计算机上使用Chrome 35,Firefox 29,Opera 21和Internet Explorer 11进行的。
在我的test中,我开始列出100首歌曲标题,并添加了不同的尾随字符串。这样我就没有任何额外的字符串,以及带有一个或多个分隔符的字符串。
正则表达式(蓝色)
将replace
与正则表达式一起使用可以处理复杂的情况。但它带来了价格,因为正则表达式可能很慢。但是使用经过测试的数据,它比Chrome和Opera中的分割速度更快,而且在Firefox中的速度大致相同。在Internet Explorer中,它是最慢的。
var result = input.replace(/&.*/, "");
拆分为数组(红色)
拆分为数组和拆分无限制几乎相同。它在临时变量中有所不同。使用测试数据,它比Chrome和Opera中的正则表达式慢,在Firefox中速度几乎相同,在Internet Explorer中也是中等速度。
var array = test.input.split('&');
var result = array[0];
以限制分割(黄色)
split
有一个可选的第二个参数,用于限制可以返回的字符串数。如果输入字符串有多个分隔符,则可能更快。
如果输入字符串中只有一个分隔符,则Chrome,Firefox和Opera的速度会慢得多。但如果有多个分隔符,Chrome和Opera会更快。在Internet Explorer中,它总是比没有限制更快。
var result = myString .split('&',1)[0];
无限拆分(绿色)
几乎与拆分为数组相同,但在Chrome和Opera中略快一些。
var reusult = myString.split('&')[0];
子字符串已修复
此版本基于使用substring
的{{3}}的答案,但如果找不到分隔符,此版本将返回整个字符串。它是所有测试浏览器中最快的方法。在Firefox中,它几乎是其他方法的两倍。
var idx = myString.indexOf('&');
var result = myString.substring(0, idx < 0 ? string.length: idx);
<强>结论强>
结果取决于您使用的数据。在表面下面有太多的缓存,分支预测和其他事情,以便根据这些测试提出一个很好的建议。从分析中可以看出,您使用的浏览器很重要。如果您需要处理大量数据,可以使用您拥有的数据来分析哪种方法更快。
使用测试数据,substring
- 方法在所有测试的浏览器中是迄今为止最快的,并且它很有意义,因为它很简单。
答案 1 :(得分:7)
一种技术是使用split()
var myString = 'artist_submission_design&IDshow=79025';
var splitString = myString.split('&');
var newString = splitString[0]; // returns artist_submission_design
另一项技术使用substring()
和indexOf()
-
var string = 'artist_submission_design&IDshow=79025';
var foo = string.substring(0, string.indexOf('&')); // foo is now "artist_submission_design"
答案 2 :(得分:2)
在javascript中使用.split方法...这是一个例子;
var string = 'artist_submission_design&IDshow=79025';
//split at the & character
var myArray = string.split('&');
//everything before and after will be put in an array like this;
myArray[0] => 'artist_submission_design'
myArray[1] => 'IDshow=79025'
//this will store everything in myArray[0] in a variable called formatedString
var formattedString = myArray[0];
这将适用于所有这些并删除&amp;之后的所有内容。不管字母/数字如何,虽然这很容易找到......
答案 3 :(得分:0)
这不是答案,这只是对之前答案的补充。
我只是好奇哪个会更高效:regex
或split
。 (我总是只是为了好玩而进行性能检查。)
HERE's 测试效果。
Ran on Chrome 27.0.1453。
以下是我所做的所有测试的基准:
regex
为0.81%较慢 regex
和split
相等 regex
慢4% regex
快8% regex
快20% regex
快8% regex
慢了0.17% regex
快6% 我们只能得出结论regex
有点快。