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とは何の関係もありません。これにはJavaScriptreplace関数を使用できます。

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

"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には、stringのremove関数はありませんが、substr関数はあります。substr関数を1回または2回使用して、文字列から文字を削除できます。次の関数を作成して、c#メソッドが最初にString.Remove(int startIndex)をオーバーロードするのと同じように、開始インデックスから文字列の終わりまでの文字を削除できます。

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

または、次の関数を作成して、c#メソッドの2番目のオーバーロードString.Remove(int startIndex、int count)のように、開始インデックスとカウントで文字を削除することもできます。

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

次に、これら2つの関数または1つを必要に応じて使用できます。

例:

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

出力:123

于 2014-04-20T12:06:47.690 に答える
10

match()およびを使用して変数Number()を返す:number

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

// strNum = 123

上記のステートメントは次のようになります...中途半端に機能します:

  1. str.match(/\d+$/)-の末尾にある任意の長さの数値に一致する配列を返しますstr。この場合、単一の文字列アイテムを含む配列を返します['123']
  2. Number()-数値タイプに変換します。から返される配列に.match()は単一の要素が含まれているためNumber()、数値が返されます。
于 2016-04-07T01:39:50.227 に答える
9

パフォーマンス

今日2021.01.14選択したソリューションについて、Chrome v87、Safari v13.1.2、Firefoxv84のMacOsHighSierra10.13.6でテストを実行します。

結果

すべてのブラウザ用

  • ソリューションBa、Cb、およびDbは、長い文字列に対して最速/最速です
  • ソリューションCa、Daは、短い文字列に対して最速/最速です
  • ソリューションAbとEは、長い文字列では低速です
  • ソリューションBa、Bb、およびFは、短い文字列では低速です

ここに画像の説明を入力してください

詳細

私は2つのテストケースを実行します:

以下のスニペットはソリューションを示して ますAaAbBa 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!

そしてここにクロムの結果の例があります

ここに画像の説明を入力してください

于 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のいずれかを受け入れ、見つかったすべての一致を、文字列または文字列を生成する関数の2番目のパラメーターに置き換えます。

サポートに関する限り、これを書いている時点では、この方法は、IEを除くすべての主要なデスクトップブラウザ*(Operaも!)の現在のバージョンで採用されています。モバイルの場合、iOS Safari iOS 13.7 + 、Android Chrome v85 +、およびAndroid Firefoxv79+もすべてサポートされています。

*これには、Edge / Chrome v85 +、Firefox v77 +、Safari 13.1+、およびOperav71+が含まれます

ユーザーがサポートされているブラウザバージョンに更新するには時間がかかりますが、ブラウザが幅広くサポートされるようになったため、時間だけが障害になります。

参照:

以下のスニペットで現在のブラウザをテストできます。

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

ループ内の文字列を置き換える場合は、各反復で新しい正規表現を開始することを確認してください。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___');
})
于 2021-09-22T00:57:47.557 に答える