如何从字符串中删除文本?

我有一个data-123字符串。

如何在离开123时从字符串中删除data-

1532600 次浏览

var ret = "data-123".replace('data-','');console.log(ret);   //prints: 123

文档。


对于要丢弃的所有事件,请使用:

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

PS:替换函数返回一个新字符串并保持原始字符串不变,因此请在替换()调用后使用函数返回值。

简单的旧JavaScript就足够了-jQuery对于这样一个简单的任务并不是必需的:

var myString = "data-123";var myNewString = myString.replace("data-", "");

见:#0 MDN上的文档了解更多信息和用法。

这与jQuery没有任何关系。您可以为此使用JavaScriptreplace函数:

var str = "data-123";str = str.replace("data-", "");

您还可以将正则表达式传递给此函数。在以下示例中,它将替换除数字之外的所有内容:

str = str.replace(/[^0-9\.]+/g, "");

我习惯了C#(Sharp)String. Remove方法。在Javascript中,字符串没有删除函数,但有substr函数。您可以使用substr函数一次或两次从字符串中删除字符。您可以执行以下函数来删除从开始索引到字符串末尾的字符,就像c#方法首先重载String. Remove(int start Index):

function Remove(str, startIndex) {return str.substr(0, startIndex);}

和/或您还可以执行以下函数来删除开始索引和计数处的字符,就像c#方法第二个重载String. Remove(int start Index, int coun):

function Remove(str, startIndex, count) {return str.substr(0, startIndex) + str.substr(startIndex + count);}

然后您可以使用这两个功能或其中一个来满足您的需求!

示例:

alert(Remove("data-123", 0, 5));

输出:123

如前所述,您可以使用"data-123".replace('data-','');,但由于replace()仅替换匹配文本的第一实例,如果您的字符串类似于"data-123data-",则

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

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

演示

因此,如果您希望将所有匹配的文本替换为字符串,则必须使用带有g标志的正则表达式,如下所示:

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

您的输出将是"123"

DEMO2

如果您想提前知道需要从原始字符串中切出多少字符,您可以使用切片()。它返回给定起点到终端之间的字符。

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"

演示

使用match()Number()返回number变量:

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

这就是上面的语句所做的……中间工作:

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

例如:-

var value="Data-123";var removeData=value.replace("Data-","");alert(removeData);

希望这将为你工作。

我做的这个小功能一直为我工作:)

String.prototype.deleteWord = function (searchTerm) {var str = this;var n = str.search(searchTerm);while (str.search(searchTerm) > -1) {n = str.search(searchTerm);str = str.substring(0, n) + str.substring(n + searchTerm.length, str.length);}return str;}
// Use it like this:var string = "text is the cool!!";string.deleteWord('the'); // Returns text is cool!!

我知道这不是最好的,但它一直为我工作:)

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

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

替换字符串所有实例的另一种方法是使用new(截至2020年8月)#0方法

它接受字符串或RegEx作为其第一个参数,并用其第二个参数替换所有找到的匹配项,无论是字符串还是生成字符串的函数。

就支持而言,在撰写本文时,这种方法已经在所有主要桌面浏览器的当前版本中采用*(甚至Opera!),除了IE。对于移动设备,iOSSafariiOS13.7+、AndroidChromev85+和Android Firefoxv79+都受到支持。

*这包括Edge/Chromev85+,Firefox v77+,Safari13.1+和Opera v71+

用户需要时间来更新到支持的浏览器版本,但现在有了广泛的浏览器支持,时间是唯一的障碍。

参考文献:

您可以在下面的代码片段中测试您当前的浏览器:

//Example coutesy of MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAllconst p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';
const regex = /dog/gi;
try {console.log(p.replaceAll(regex, 'ferret'));// expected output: "The quick brown fox jumps over the lazy ferret. If the ferret reacted, was it really lazy?"
console.log(p.replaceAll('dog', 'monkey'));// expected output: "The quick brown fox jumps over the lazy monkey. If the monkey reacted, was it really lazy?"console.log('Your browser is supported!');} catch (e) {console.log('Your browser is unsupported! :(');}
.as-console-wrapper: {max-height: 100% !important;}

性能

今天2021.01.14我在Chromev87、Safariv13.1.2和Firefox v84上对MacO HighSierra 10.13.6进行测试,以获取所选解决方案。

搜索结果

对于所有浏览器

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

在此处输入图片描述

详情

我执行两个测试用例:

  • 短字符串-10个字符-你可以运行它这里
  • long string-1 000 000个字符-你可以运行它这里

下面的代码片段提供了解决方案AaAbBaBbCaCbDaDbEF

// https://stackoverflow.com/questions/10398931/how-to-strToRemove-text-from-a-string
// https://stackoverflow.com/a/10398941/860099function Aa(str,strToRemove) {return str.replace(strToRemove,'');}
// https://stackoverflow.com/a/63362111/860099function Ab(str,strToRemove) {return str.replaceAll(strToRemove,'');}
// https://stackoverflow.com/a/23539019/860099function Ba(str,strToRemove) {let re = strToRemove.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // regexp escape charreturn str.replace(new RegExp(re),'');}
// https://stackoverflow.com/a/63362111/860099function Bb(str,strToRemove) {let re = strToRemove.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // regexp escape charreturn str.replaceAll(new RegExp(re,'g'),'');}
// https://stackoverflow.com/a/27098801/860099function 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/860099function 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/860099function Da(str,strToRemove) {let start = str.indexOf(strToRemove);return str.substr(0, start) + str.substr(start + strToRemove.length);}
// https://stackoverflow.com/a/23181792/860099function Db(str,strToRemove) {let start = str.search(strToRemove);return str.substr(0, start) + str.substr(start + strToRemove.length);}
// https://stackoverflow.com/a/49857431/860099function E(str,strToRemove) {return str.split(strToRemove).join('');}
// https://stackoverflow.com/a/45406624/860099function 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!

And here are example results for chrome

enter image description here

确保如果你在循环中替换字符串,你在每次迭代中都启动一个新的Regex。截至9/21/21,这仍然是一个已知的问题,Regex基本上错过了每一个其他的匹配。当我第一次遇到这个问题时,这让我陷入了一个循环:

yourArray.forEach((string) => {string.replace(new RegExp(__your_regex__), '___desired_replacement_value___');})

如果你试着这样做,不要惊讶,如果只有其他的工作

let reg = new RegExp('your regex');yourArray.forEach((string) => {string.replace(reg, '___desired_replacement_value___');})

1-如果是字符串中的序列:

let myString = "mytest-text";let myNewString = myString.replace("mytest-", "");

答案是文字

2-如果您要删除前3个字符:

"mytest-text".substring(3);

答案为est-text

const newString = string.split("data-").pop();console.log(newString); /// 123

做这样的事情有很多不同的方法。更进一步的方法可能是以下:

let str = 'data-123';str = str.split('-')[1];console.log('The remaining string is:\n' + str);

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

以下是一个线性版本:

console.log('The remaining string is:\n' + 'data-123'.split('-')[1]);

Another possible approach would be to add a method to the String prototype as follows:

String.prototype.remove = function (s){return this.replace(s,'')}
// After that it will be used like this:
a = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakgkekk';a = a.remove('k');console.log(a);

请注意,上面的代码段只允许删除您有兴趣删除的字符串的第一个实例。但您可以对其进行一些改进,如下所示:

String.prototype.removeAll = function (s){return this.replaceAll(s,'')}
// After that it will be used like this:
a = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakgkekk';a = a.removeAll('k');console.log(a);

相反,上面的代码段将删除传递给方法的字符串的所有实例。当然,你不需要将函数实现到String对象的原型中:如果你愿意,你也可以将它们实现为简单的函数(我将展示删除所有函数,对于其他你需要使用的只是替换全部替换而是,所以实现起来很简单):

function strRemoveAll(s,r){return s.replaceAll(r,'');}
// you can use it as:
let a = 'ktkhkiksk kiksk ktkhkek kcklkekaknk kmkekskskakgkekk'b = strRemoveAll (a,'k');console.log(b);

当然,更多的是可能的。