我得到了一个data-123字符串。

我如何删除数据-从字符串,而离开123?


当前回答

使用match()和Number()返回一个数字变量:

Number(("data-123").match(/\d+$/));

// strNum = 123

下面是上面这句话的作用……工作中间向外:

str.match(/\d+$/) -返回一个数组,该数组包含str结尾任意长度的数字的匹配。在这种情况下,它返回一个包含单个字符串项['123']的数组。 Number() -将其转换为数字类型。因为从.match()返回的数组包含单个元素Number()将返回该数字。

其他回答

可以使用slice(),如果您预先知道需要从原始字符串中分割出多少字符。它返回从起始点到结束点之间的字符。

string.slice(start, end);

下面是一些例子说明它是如何工作的:

var mystr = ("data-123").slice(5); // This just defines a start point so the output is "123"
var mystr = ("data-123").slice(5,7); // This defines a start and an end  so the output is "12"

Demo

要做这样的事情,有很多不同的方法。进一步的方法可以如下:

让STR = 'data-123'; STR = STR .split('-')[1]; console.log('剩下的字符串是:\n' + str);

基本上,上面的代码将'-'字符处的字符串拆分为两个数组元素,并获得第二个数组元素,即索引为1的那个,忽略索引为0的第一个数组元素。

以下是一个线性版本:

console.log('剩下的字符串是:\n' + 'data-123'.split('-')[1]);

另一种可能的方法是向String原型添加一个方法,如下所示:

String.prototype.remove = function (s){返回this.replace(s, ")} //之后,它将像这样使用: A = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakakgkekk '; A = A .remove('k'); console.log(一个);

注意,上面的代码片段只允许删除您感兴趣的字符串的第一个实例。但你可以做如下改进:

String.prototype.removeAll = function (s){返回this.replaceAll(s, ")} //之后,它将像这样使用: A = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakakgkekk '; a = a. removeall ('k'); console.log(一个);

上面的代码片段将删除传递给该方法的字符串的所有实例。 当然,你不需要在String对象的原型中实现这些函数:如果你愿意,你也可以将它们作为简单的函数来实现(我将展示remove all函数,对于其他函数,你只需要使用replace而不是replaceAll,所以实现起来很简单):

函数strRemoveAll (s, r) { 返回s.replaceAll (r,”); } //你可以这样使用它: 让a = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakakgkekk ' b = strRemoveAll (a,'k'); console.log (b);

当然,可能性要大得多。

你可以使用"data-123".replace('data-', ");,如前面提到的,但是replace()只替换匹配文本的FIRST实例,如果你的字符串是"data-123data-"那么

"data-123data-".replace('data-','');

只替换第一个匹配的文本。您的输出将是"123data-"

DEMO

所以如果你想在字符串中替换所有匹配的文本,你必须使用一个带有g标志的正则表达式:

"data-123data-".replace(/data-/g,'');

你的输出是"123"

以及接下来

性能

今天2021.01.14我在Chrome v87, Safari v13.1.2和Firefox v84上对所选解决方案的MacOs HighSierra 10.13.6进行测试。

结果

适用于所有浏览器

解决方案Ba, Cb和Db是快速/最快的长字符串 解决方案Ca, Da是快速/最快的短字符串 Ab解和E解对于长弦是缓慢的 Ba, Bb和F解对于短弦是缓慢的

细节

我执行2个测试用例:

短字符串- 10个字符-你可以在这里运行它 长字符串- 100万个字符-你可以在这里运行它

下面的代码片段给出了解决方案 Aa Ab 英航 Bb Ca Cb 达 Db E F

// https://stackoverflow.com/questions/10398931/how-to-strToRemove-text-from-a-string // https://stackoverflow.com/a/10398941/860099 function Aa(str,strToRemove) { return str.replace(strToRemove,''); } // https://stackoverflow.com/a/63362111/860099 function Ab(str,strToRemove) { return str.replaceAll(strToRemove,''); } // https://stackoverflow.com/a/23539019/860099 function Ba(str,strToRemove) { let re = strToRemove.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // regexp escape char return str.replace(new RegExp(re),''); } // https://stackoverflow.com/a/63362111/860099 function Bb(str,strToRemove) { let re = strToRemove.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // regexp escape char return str.replaceAll(new RegExp(re,'g'),''); } // https://stackoverflow.com/a/27098801/860099 function Ca(str,strToRemove) { let start = str.indexOf(strToRemove); return str.slice(0,start) + str.slice(start+strToRemove.length, str.length); } // https://stackoverflow.com/a/27098801/860099 function Cb(str,strToRemove) { let start = str.search(strToRemove); return str.slice(0,start) + str.slice(start+strToRemove.length, str.length); } // https://stackoverflow.com/a/23181792/860099 function Da(str,strToRemove) { let start = str.indexOf(strToRemove); return str.substr(0, start) + str.substr(start + strToRemove.length); } // https://stackoverflow.com/a/23181792/860099 function Db(str,strToRemove) { let start = str.search(strToRemove); return str.substr(0, start) + str.substr(start + strToRemove.length); } // https://stackoverflow.com/a/49857431/860099 function E(str,strToRemove) { return str.split(strToRemove).join(''); } // https://stackoverflow.com/a/45406624/860099 function F(str,strToRemove) { var n = str.search(strToRemove); while (str.search(strToRemove) > -1) { n = str.search(strToRemove); str = str.substring(0, n) + str.substring(n + strToRemove.length, str.length); } return str; } let str = "data-123"; let strToRemove = "data-"; [Aa,Ab,Ba,Bb,Ca,Cb,Da,Db,E,F].map( f=> console.log(`${f.name.padEnd(2,' ')} ${f(str,strToRemove)}`)); This shippet only presents functions used in performance tests - it not perform tests itself!

这里是chrome的示例结果

str.split('Yes').join('No'); 

这将从原始字符串中替换该特定字符串的所有出现。