web-dev-qa-db-ja.com

JavaScriptでstr_replaceを実行して、JavaScriptのテキストを置き換えるにはどうすればよいですか?

JavaScriptの一部のテキストを置き換えるには、str_replaceまたはその類似の代替手段を使用します。

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");

与えるべき

this is some sample text that i dont want to replace

正規表現を使用する場合、組み込みの置換メソッドと比較した場合のパフォーマンスへの影響はどうなりますか。

131
Vish

文字列置換に正規表現を使用すると、文字列置換を使用するよりも大幅に遅くなります。
実証されているように JSPerfで 、正規表現を作成するためのさまざまなレベルの効率がありますが、それらはすべて単純な文字列の置換よりも大幅に遅くなります。 正規表現が遅いため

固定文字列の一致には、バックトラック、コンパイル手順、範囲、文字クラス、または正規表現エンジンの速度を低下させる他の機能のホストはありません。正規表現の一致を最適化する方法は確かにありますが、一般的なケースでは文字列へのインデックス付けに勝るものはないと思います。

JS perfページで簡単なテストを実行するために、いくつかの結果を文書化しました。

<script>
// Setup
  var startString = "xxxxxxxxxabcxxxxxxabcxx";
  var endStringRegEx = undefined;
  var endStringString = undefined;
  var endStringRegExNewStr = undefined;
  var endStringRegExNew = undefined;
  var endStringStoredRegEx = undefined;      
  var re = new RegExp("abc", "g");
</script>

<script>
// Tests
  endStringRegEx = startString.replace(/abc/g, "def") // Regex
  endStringString = startString.replace("abc", "def", "g") // String
  endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
  endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
  endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>

Chrome 68の結果は次のとおりです。

String replace:    9,936,093 operations/sec
Saved regex:       5,725,506 operations/sec
Regex:             5,529,504 operations/sec
New Regex String:  3,571,180 operations/sec
New Regex:         3,224,919 operations/sec

この回答の完全性(コメントからの引用)から、.replaceは一致した文字の最初のインスタンスのみを置き換えることに言及する価値があります。すべてのインスタンスを//gで置き換えることのみが可能です。複数のインスタンスname.replace(' ', '_').replace(' ', '_').replace(' ', '_');またはさらに悪いwhile (name.includes(' ')) { name = name.replace(' ', '_') }を置き換えると、パフォーマンスのトレードオフとコードの優雅さが悪化すると主張される可能性があります

9
TheChetan

replaceメソッドを使用します。

text = text.replace('old', 'new');

最初の引数は、明らかにあなたが探しているものです。正規表現も受け入れることができます。

notは元の文字列を変更します。新しい値のみを返します。

194
sdleihssirhc

より簡単に:

city_name=city_name.replace(/ /gi,'_');

すべてのスペースを「_」に置き換えます!

82
realmag777

これらのメソッドはすべて元の値を変更せず、新しい文字列を返します。

var city_name = 'Some text with spaces';

最初のスペースを_に置き換えます

city_name.replace(' ', '_'); // Returns: Some_text with spaces

正規表現を使用して、すべてのスペースを_に置き換えます。正規表現を使用する必要がある場合は、 https://regex101.com/ でテストすることをお勧めします

city_name.replace(/ /gi,'_');  // Returns: Some_text_with_spaces 

すべてのスペースを_とregexなしで置き換えます。機能的な方法。

city_name.split(' ').join('_');  // Returns: Some_text_with_spaces
17
Lukas

あなたはそのような何かを書くべきです:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);
16
Timon. Z

その関数は、1つだけを置換します。複数の出現を置換する必要がある場合は、この関数を試してください: http://phpjs.org/functions/str_replace:527

必ずしも。 Hans Kestingの回答をご覧ください。

city_name = city_name.replace(/ /gi,'_');
14
Pavel

他の人があなたに与えているコードは1つの出現のみを置き換えますが、正規表現を使用するとそれらはすべて置き換えられます(@sorgitが言ったように)。すべての「欲しい」を「望まない」に置き換えるには、次のコードを使用します。

var text = "this is some sample text that i want to replace";
var new_text = text.replace(/want/g, "dont want");
document.write(new_text);

変数「new_text」は、「これは置き換えたくないサンプルテキストです」という結果になります。

正規表現のクイックガイドを入手するには、こちらにアクセスしてください。
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
str.replace()の詳細については、こちらをご覧ください。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace
がんばろう!

14
Zoyt

hm .. replace()をチェックしましたか?

コードは次のようになります

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);
8
arbithero
var new_text = text.replace("want", "dont want");
7
Town

JavaScriptでは、Stringオブジェクトでreplaceメソッドを呼び出します。 "this is some sample text that i want to replace".replace("want", "dont want")。置換された文字列を返します。

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want"); // new_text now stores the replaced string, leaving the original untouched
7
user193476

JavaScriptには、部分文字列を置き換えるためのStringオブジェクトのreplace()メソッドがあります。このメソッドには2つの引数があります。最初の引数は文字列または正規表現パターン(regExpオブジェクト)で、2番目の引数は文字列または関数です。両方の文字列引数を持つreplace()メソッドの例を以下に示します。

var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text)  //ten, two, three, one, five, one

最初の引数が文字列の場合、サブストリングの最初の出現のみが上記の例のように置き換えられることに注意してください。部分文字列のすべての出現を置き換えるには、g(グローバル)フラグを持つ正規表現を提供する必要があります。グローバルフラグを指定しない場合、最初の引数として正規表現を指定しても、最初に出現したサブストリングのみが置換されます。それで、上記の例のoneのすべての出現を置き換えましょう。

var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text)  //ten, two, three, ten, five, ten

正規表現パターンを引用符で囲みません。regExpオブジェクトではなく文字列になります。大文字と小文字を区別しない置換を行うには、パターンで大文字と小文字を区別しないフラグiを追加する必要があります。その場合、上記の正規表現は/one/giになります。ここにiフラグが追加されていることに注意してください。

2番目の引数に関数があり、一致する場合、関数は3つの引数で渡されます。関数が取得する引数は、一致、一致の位置、および元のテキストです。一致するものを置き換える必要があるものを返す必要があります。例えば、

var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten

2番目の引数として関数を使用すると、置換テキストをより詳細に制御できます。

7
Saral

使用できます

text.replace('old', 'new')

また、1つの文字列の複数の値を一度に変更するには、たとえば#を文字列vに、_を文字列wに変更します。

text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});
3
aabiro

PHPのstr_replaceと同等のものが本当に必要な場合は、 Locutus を使用できます。 PHPのstr_replaceバージョンは、JavaScriptのString.prototype.replaceがサポートするオプションよりも多くのオプションをサポートします。タグの例:

//PHP
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
//JS with Locutus
var $bodytag = str_replace(['{body}', 'black', '<body text='{body}'>')  

または配列の

//PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//JS with Locutus
var $vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
var $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");

また、これはforループを使用する代わりに正規表現を使用しません。正規表現を使用したくないが、単純な文字列の置換が必要な場合は、このようなものを使用できます(Locutusに基づいて)

function str_replace (search, replace, subject) {

  var i = 0
  var j = 0
  var temp = ''
  var repl = ''
  var sl = 0
  var fl = 0
  var f = [].concat(search)
  var r = [].concat(replace)
  var s = subject
  s = [].concat(s)

  for (i = 0, sl = s.length; i < sl; i++) {
    if (s[i] === '') {
      continue
    }
    for (j = 0, fl = f.length; j < fl; j++) {
      temp = s[i] + ''
      repl = r[0]
      s[i] = (temp).split(f[j]).join(repl)
      if (typeof countObj !== 'undefined') {
        countObj.value += ((temp.split(f[j])).length - 1)
      }
    }
  }
  return s[0]
}
var text = "this is some sample text that i want to replace";

var new_text = str_replace ("want", "dont want", text)
document.write(new_text)

詳細については、ソースコードを参照してください https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js

3
Victor Perez

str.replace() (この質問には十分です)とregexを使用して既に複数の回答がありますが、 str.split() と-の組み合わせを使用できます join() 一緒にstr.replace()およびregexより高速です。

以下に作業例を示します。

var text = "this is some sample text that i want to replace";

console.log(text.split("want").join("dont want"));
3
VicJordan

次のオプションがあります。

  1. 最初の出現を置き換える
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace('want', 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well"
console.log(new_text)
  1. すべての出現箇所を置換-大文字と小文字を区別
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/g, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well
console.log(new_text)
  1. すべての出現箇所を置換-大文字と小文字を区別しません
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/gi, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i dont want to replace as well
console.log(new_text)

詳細-> こちら

2

正規表現を使用したくない場合は、この関数を使用して文字列内のすべてを置き換えることができます

ソースコード:

function ReplaceAll(mystring, search_Word, replace_with) 
{
    while (mystring.includes(search_Word))
    {
        mystring = mystring.replace(search_Word, replace_with);
    }

    return mystring;  
}

使い方:

var mystring = ReplaceAll("Test Test", "Test", "Hello"); 
2
al000y

JSを使用するString.prototype.replace最初の引数は正規表現パターンまたは文字列であり、2番目の引数は文字列または関数でなければなりません。

str.replace(regexp|substr, newSubStr|function);

例:

var str = 'this is some sample text that i want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr); // this is some sample text that i don't want to replace

2
Shubham oli

Javascriptでは、 replace 指定された文字列のサブ文字列を新しいものに置き換えるために使用可能な関数。 使用:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
console.log(new_text);

この関数で正規表現を使用することもできます。たとえば、,のすべての出現を.に置き換える場合。

var text = "123,123,123";
var new_text = text.replace(/,/g, ".");
console.log(new_text);

ここでg修飾子は、使用可能なすべての一致をグローバルに一致させるために使用されます。

2
Lovepreet Singh

Reactを使用したreplace substring in a sentenceへのメソッド:

 const replace_in_javascript = (oldSubStr, newSubStr, sentence) => {
    let newStr = "";
    let i = 0;
    sentence.split(" ").forEach(obj => {
      if (obj.toUpperCase() === oldSubStr.toUpperCase()) {
        newStr = i === 0 ? newSubStr : newStr + " " + newSubStr;
        i = i + 1;
      } else {
        newStr = i === 0 ? obj : newStr + " " + obj;
        i = i + 1;
      }
    });
    return newStr;
  };

RunMethodHere

2
bh4r4th
function str_replace($old, $new, $text)
{
   return ($text+"").split($old).join($new); 
}

追加のライブラリは必要ありません。

0
18C