web-dev-qa-db-ja.com

Javascriptを使用して文字列から文字を削除する方法

私はこれに近づくことができますが、それは正しくありません。私がしたいのは、文字列から文字 "r"を削除することだけです。問題は、文字列内に "r"のインスタンスが複数あることです。ただし、これは常にインデックス4の文字(つまり5番目の文字)です。

文字列の例: "crt/r2002_2"必要なもの: "crt/2002_2"

この置換機能は両方の "r"を削除します

mystring.replace(/r/g, '')

プロデュース: "ct/2002_2"

私はこの機能を試してみました:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')

他のキャラクターに置き換えた場合にのみ機能します。単に削除するわけではありません。

何かご意見は?

272
user1293504
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

/r を使用して/String.prototype.replaceに置き換えます。

別の方法として、(以下の Erik ReppenSagar Gala で示唆されているように)グローバルフラグを指定してregexを使用することもできます。

mystring = mystring.replace(/\/r/g, '/');
382
JKirchartz

簡単な機能的なJavaScriptの方法は

mystring = mystring.split('/r').join('/')

シンプル、高速、グローバルに置き換わり、関数やプロトタイプは不要

52
Strife86

常に4番目の文字を削除することがわかっているのであれば、文字列関数は常にあります。

str.slice(0, 4) + str.slice(5, str.length))
46
simpleigh

あなたの最初の機能はほぼ正しいです。 'global'(編集)を表す 'g'フラグを削除して、2番目の 'r'を見つけるために何らかの文脈を与えるだけです。

編集:前に2番目の「r」が表示されていなかったので、「/」を追加しました。 regEx引数を使うときは、\ /が必要です。支持票をいただきありがとうございますが、私は間違っていたので、regExの基本をよりよく理解することに興味がある人のために詳細を修正して追加しますが、これでうまくいきます。

mystring.replace(/\/r/, '/')

過剰な説明のために:

RegExパターンを読み書きするときは、<a文字または文字セット>の後に<a文字または文字セット>の後に<...を付けて考えること。

RegExでは、<文字または文字セット>は一度に1つになります。

/each char in this pattern/

したがって、e、a、cの順に読みます。

あるいは、単一の<a文字または一連の文字>が、文字クラスによって記述された文字になることもあります。

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

あるいは、文字数に合わせて拡張します(ただし、シーケンシャルパターンの観点からは単一の要素として考えるのが最善です)。

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

だから束を一緒にスムーズに:

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

そしてもちろん、私は過度に詳しく説明しました、しかし私のポイントは単にこれがそれだったということでした:

/cat/

一連の3つのパターン要素(ものとそれに続くもの)です。

そしてこれもそうです:

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

RegExが見え始めると同時に風変わりなことに、それはすべて順番に連続している一連のもの(潜在的に複数文字のもの)に分解されます。基本的なポイントのようなものですが、過去のものになるのに時間がかかったので、ここで説明するのはやめておきました。 regExを読み書きするための鍵はそれらをそれらの部分に分割することです。

25
Erik Reppen

'/ r'をグローバルに置き換えるために、このコードは役に立ちました。

mystring = mystring.replace(/\/r/g,'');
10
Sagar Gala

replaceAtを修正するだけです。

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

代わりにremoveAtと呼びます。 :)

4
Ken White
return this.substr(0, index) + char + this.substr(index + char.length);

char.lengthはゼロです。この場合、文字をスキップするために1を追加する必要があります。

4
Eugene Retunsky

それがyourStringの中で常に4番目の文字であるなら、あなたは試すことができます:

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });
2
Just_Mad

他のキャラクターに置き換えた場合にのみ機能します。単に削除するわけではありません。

これは、char""と等しい場合、char.lengthが0であるため、部分文字列が結合されて元の文字列が形成されるためです。あなたのコードを試してみると、以下がうまくいくでしょう。

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}
2
paislee

最短の方法はスプライスを使用することです

var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);
1
Gabrielus

以下のような関数を作成します

  String.prototype.replaceAt = function (index, char) {
    if(char=='')
    {
    return this.slice(0,index)+this.substr(index+1 + char.length);
    }
    else
    {

    return this.substr(0, index) + char + this.substr(index + char.length);
    }
    }

以下のように文字を置き換える

  var a="12346";
    a.replaceAt(4,'5');

enter image description here

インデックスの文字を削除するには、2番目のパラメータに空文字列を指定します

a.replaceAt(4、 '');

enter image description here

1
Rajiv

あなたがただ一つの文字を取り除きたいだけで、あなたがあなたが取り除きたい文字のインデックスを知っているならば、あなたは次の関数を使うことができます:

/**
 * Remove single character at particular index from string
 * @param {*} index index of character you want to remove
 * @param {*} str string from which character should be removed
 */
function removeCharAtIndex(index, str) {
    return str.substring(0, index - 1) + str.substring(index, str.length)
}
0
dd619

次の関数は私の場合に最適でした:

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}
0
TekTimmy

文字列から文字を削除するためにreplace関数を使うのは嫌いです。 これは論理的ではありません そのようにするために。通常、私はC#(Sharp)でプログラムし、文字列から文字を削除したいときはいつでもStringクラスのRemoveメソッドを使いますが、Replaceメソッドはありません。交換しないでください。 これは論理的です。

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("crt/r2002_2", 4, 1));

出力:crt/2002_2

ロジックなし のテクニックを使用して目標を達成すると、大規模なプロジェクトでこれを頻繁に行うと、コードの理解に混乱が生じたり、将来の間違いが生じる可能性があります。

0
user2133061

これは 簡易解答 の改良です/(省略長)

s.slice(0,4)+s.slice(5)
let s="crt/r2002_2";

let o= s.slice(0,4)+s.slice(5);

let delAtIdx= (s,i) => s.slice(0,i)+s.slice(i+1); // this function remove letter at index i

console.log(o);
console.log(delAtIdx(s,4));
0

これを使うことができます:if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)

説明:

  1. if ( str[4] === 'r' )
    5番目の文字が'r'かどうかを確認してください

  2. str.slice(0, 4)
    'r'の前にあるものすべてを得るために文字列をスライスします

  3. + str.slice(5)
    残りの文字列を追加します。

縮小: s=s[4]=='r'?s.slice(0,4)+s.slice(5):s [37バイト!]

デモ:

function remove5thR (s) {
  s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
  console.log(s); // log output
}

remove5thR('crt/r2002_2')  // > 'crt/2002_2'
remove5thR('crt|r2002_2')  // > 'crt|2002_2'
remove5thR('rrrrr')        // > 'rrrr'
remove5thR('RRRRR')        // > 'RRRRR' (no change)
0
Glubey

C#(シャープ)では、空文字を '\ 0'にすることができます。多分あなたはこれを行うことができます:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

Googleで検索するか、またはinterentでサーフィンし、C#のようにjavascriptで空の文字を作成できるかどうかを確認してください。そうであれば、それからそのやり方を学び、そしてreplaceAt関数がついに動作するでしょう、そしてあなたはあなたが望むものを達成するでしょう!

最後に、その「r」文字は削除されます。

0
user2133061