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

Uni*_*orn 1 javascript string jquery

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

1. artist_submission_design&IDshow=79025 OR
2. artist_design&IDshow=102 OR
3. status_design_001&IDshow=1
Run Code Online (Sandbox Code Playgroud)

如何使用javascript或jQuery删除"&"之后的所有内容?

这是我尝试过的:

var newxx = xx.replace("&IDshow=", "");
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为后面的数字=可能会有所不同,所以我不知道如何解决它.

som*_*ome 9

有几种方法可以删除字符串的最后一部分.所有这些都有利有弊.

假设我们有这个字符串:

var myString = "artist_submission_design&IDshow=79025";
Run Code Online (Sandbox Code Playgroud)

更换

string对象的replace -method用另一个替换字符串的一部分它需要两个参数.第一个是字符串或正则表达式,用于描述应该替换的字符串的哪个部分.第二个参数用于替换匹配的内容.它可以是字符串或函数.

在下面的示例中,匹配是使用与&-character 匹配的正则表达式以及之后的每个字符,匹配将替换为空字符串.

var result = myString.replace(/&.*/,"");
Run Code Online (Sandbox Code Playgroud)

正则表达式是灵活的,您可以进行复杂的模式匹配.但执行起来可能会很慢.

分裂

string对象的split -method将字符串拆分为一个或多个字符串,并返回带有字符串的数组.它需要一两个参数.第一个是分隔符,它应该分割的字符串.它可以是单个字符或多字符字符串.第二个参数限制是可选的,并限制将在数组中返回的字符串数.如果在输入字符串中重复分隔符,则很重要.例如,如果分隔符为"&",则"songname&artist = name&album = album&label = label"将返回包含4个字符串的数组.如果您只对第一个字符串感兴趣,则没有理由获得包含多个字符串的数组.

在下面的示例中,myString在每个上都被拆分&,但我们将其限制为一个字符串.而且由于split返回一个数组,我们只对数组的第一个元素感兴趣,我得到数组的第一个元素[0](在javascript中,数组的索引是从零开始的).

var result= myString.split('&',1)[0];
Run Code Online (Sandbox Code Playgroud)

split 如果字符串应该分成几个字符串,则可以快速使用.

substring string对象 的substring -method返回字符串的一部分.它可以与indexOf(搜索指定的字符串)一起使用,以确定应该返回的字符串的哪个部分.这种方法是由Jay Blanchard提出的.将indexOf返回-1如果搜索没有找到字符串.因为我们在这种情况下想要整个字符串,我们必须测试该情况并调整结束位置.

var pos = myString.indexOf('&');
if ( pos < 0 ) pos = myString.length;
var result = myString.substring(0, pos);
Run Code Online (Sandbox Code Playgroud)

虽然输入的内容多一点,但在所有经过测试的浏览器中,性能都很棒.

那么我应该使用哪一个?

这取决于您正在做什么,以及您正在处理多少数据.cr0ss确实在jsperf上设置了性能测试.我添加了一些更多的测试,后来甚至更多的测试和更多的数据.最新测试是在同一台计算机上使用Chrome 35,Firefox 29,Opera 21和Internet Explorer 11进行的.

性能 在我的测试中,我首先列出了100首歌曲的标题,并添加了不同的尾随字符串.这样我就得到了没有额外的字符串,以及带有一个或多个分隔符的字符串.

正则表达式(蓝色)

使用replace正则表达式可以处理复杂的情况.但它带来了价格,因为正则表达式可能很慢.但是使用经过测试的数据,它比Chrome和Opera中的分割速度更快,而且在Firefox中的速度大致相同.在Internet Explorer中,它是最慢的.

var result = input.replace(/&.*/, "");
Run Code Online (Sandbox Code Playgroud)

拆分为数组(红色)

拆分为数组并且无限制地拆分几乎是一样的.它在临时变量中有所不同.使用经过测试的数据,它比Chrome和Opera中的正则表达式慢,在Firefox中速度几乎相同,在Internet Explorer中也是中等速度.

var array = test.input.split('&');
var result = array[0];
Run Code Online (Sandbox Code Playgroud)

分裂限制(黄色)

split有一个可选的第二个参数,它限制了可返回的字符串数.如果输入字符串有多个分隔符,则可能更快.

如果输入字符串中只有一个分隔符,则Chrome,Firefox和Opera中的分隔符要慢得多.但如果有多个分隔符,Chrome和Opera会更快.在Internet Explorer中,它总是比没有限制更快.

var result = myString .split('&',1)[0];
Run Code Online (Sandbox Code Playgroud)

无限分割(绿色)

几乎与拆分到阵列相同,但在Chrome和Opera中略快一些.

var reusult = myString.split('&')[0];
Run Code Online (Sandbox Code Playgroud)

子串固定

此版本基于Jay Blanchard使用的答案,substring但如果找不到分隔符,此版本将返回整个字符串.它是所有测试浏览器中最快的方法.在Firefox中,它几乎是其他方法的两倍.

var idx = myString.indexOf('&');
var result = myString.substring(0, idx < 0 ? string.length: idx);
Run Code Online (Sandbox Code Playgroud)

结论

结果取决于您使用的数据.在表面下面有太多的缓存,分支预测和其他事情,以便根据这些测试提出一个很好的建议.从分析中可以看出,您使用的浏览器很重要.如果您需要处理大量数据,则可以使用您拥有的数据来分析哪种方法更快.

使用经过测试的数据,substring-method在所有测试的浏览器中是迄今为止最快的,并且它很简单,因为它很简单.


Jay*_*ard 7

一种技术正在使用 split()

var myString = 'artist_submission_design&IDshow=79025';
var splitString = myString.split('&');
var newString = splitString[0]; // returns artist_submission_design
Run Code Online (Sandbox Code Playgroud)

另一种技术使用substring()indexOf()-

var string = 'artist_submission_design&IDshow=79025';
var foo = string.substring(0, string.indexOf('&')); // foo is now "artist_submission_design"
Run Code Online (Sandbox Code Playgroud)