如何在JavaScript中删除字符串的最后一部分?

时间:2014-05-30 21:22:04

标签: javascript jquery string

我有一些字符串;他们可以是,例如:

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=", "");

但它不起作用,因为=之后的数字可能会有所不同,所以我不知道如何处理它。

4 个答案:

答案 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进行的。

Performance 在我的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;之后的所有内容。不管字母/数字如何,虽然这很容易找到......

javascript split

答案 3 :(得分:0)

这不是答案,这只是对之前答案的补充。

我只是好奇哪个会更高效:regexsplit。 (我总是只是为了好玩而进行性能检查。)

HERE's 测试效果。

Ran on Chrome 27.0.1453。

以下是我所做的所有测试的基准:

  1. regex为0.81%较慢
  2. regexsplit 相等
  3. regex 慢4%
  4. regex 快8%
  5. regex 快20%
  6. regex 快8%
  7. regex 慢了0.17%
  8. regex 快6%
  9. 我们只能得出结论regex有点快。