832

我有一个data-123字符串。

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

4

14 回答 14

1616

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

文档。


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

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

PS:replace函数返回一个新字符串,原字符串不变,所以使用replace()调用后的函数返回值。

于 2012-05-01T14:14:00.627 回答
158

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

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

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

str = str.replace(/[^0-9\.]+/g, "");
于 2012-05-01T14:14:37.680 回答
73

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

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

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

演示

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

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

你的输出将是"123"

演示2

于 2014-05-08T10:21:04.727 回答
38

如果您事先知道需要从原始字符串中切出多少个字符,则可以使用 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"

演示

于 2014-11-24T06:08:13.307 回答
27

普通的旧 JavaScript 就足够了——对于这样一个简单的任务,jQuery 不是必需的:

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

有关更多信息和用法,请参阅:.replace()MDN 上的文档。

于 2012-05-01T14:14:06.650 回答
17

前任:-

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

希望这对你有用。

于 2016-05-26T05:53:31.317 回答
14

我做的这个小功能一直对我有用:)

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!!

我知道这不是最好的,但它一直对我有用:)

于 2017-07-31T02:18:25.330 回答
12
str.split('Yes').join('No'); 

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

于 2018-04-16T12:30:39.863 回答
11

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

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

和/或您还可以使用以下函数来删除起始索引和计数处的字符,就像 c# 方法第二个重载 String.Remove(int startIndex, int count) 一样:

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

然后您可以根据需要使用这两个功能或其中之一!

例子:

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

输出:123

于 2014-04-20T12:06:47.690 回答
10

使用match()andNumber()返回一个number变量:

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

// strNum = 123

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

  1. str.match(/\d+$/)- 返回一个数组,其中包含与 . 结尾处任意长度数字的匹配项str。在这种情况下,它返回一个包含单个字符串 item 的数组['123']
  2. Number()- 将其转换为数字类型。因为从返回的数组.match()包含单个元素Number()将返回数字。
于 2016-04-07T01:39:50.227 回答
9

表现

今天 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 个测试用例:

下面的片段展示了解决方案 Aa Ab Ba Bb Ca Cb Da 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 的示例结果

在此处输入图像描述

于 2021-01-14T18:09:20.563 回答
9

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

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

答案是文字

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

"mytest-text".substring(3);

答案是 est-text

于 2021-10-06T12:02:46.097 回答
1

替换字符串的所有实例的另一种方法是使用新的(截至 2020 年 8 月)String.prototype.replaceAll()方法

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

就支持而言,在撰写本文时,此方法已在所有主要桌面浏览器*(甚至 Opera!)的当前版本中采用,IE 除外。对于移动设备,还支持 iOS Safari iOS 13.7 + 、Android Chrome v85+和 Android Firefox v79+

* 这包括 Edge/Chrome v85+、Firefox v77+、Safari 13.1+ 和 Opera v71+

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

参考:

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

//Example coutesy of MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll
const 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;
}

于 2020-08-11T16:06:59.510 回答
0

确保如果您在循环中替换字符串,则在每次迭代中启动一个新的正则表达式。截至 21 年 9 月 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___');
})
于 2021-09-22T00:57:47.557 回答