343

「_」のすべてのインスタンスをスペースに置き換え、「#」のすべてのインスタンスを何もない/空に置き換える必要があります。

var string = '#Please send_an_information_pack_to_the_following_address:';

私はこれを試しました:

string.replace('#','').replace('_', ' ');

このようなコマンドの連鎖はあまり好きではありません。1つでそれを行う別の方法はありますか?

4

18 に答える 18

48

正規表現に (global) フラグを指定して/g、最初の一致だけでなくすべての一致を置き換えます。

string.replace(/_/g, ' ').replace(/#/g, '')

ある文字をあるものに置き換え、別の文字を別のものに置き換えるには、 を 2 回別々に呼び出す必要があり、実際には回避できませんreplace。Doorknob が行ったように関数に抽象化できますが、フラットな配列ではなく、キーと値のペアとして古い/新しいオブジェクトを取得することになるでしょう。

于 2013-05-16T00:10:17.277 に答える
7

これを試すことができます:

str.replace(/[.#]/g, 'replacechar');

これにより、 .,- および # が replacechar に置き換えられます。

于 2016-09-09T14:36:36.140 に答える
7

これがどれだけ役立つかはわかりませんが、文字列から削除<b>したかったのです</b>

だから私は使った

mystring.replace('<b>',' ').replace('</b>','');

したがって、基本的に限られた数の文字を減らして時間を無駄にしたくない場合は、これが役立ちます.

于 2018-07-12T10:50:56.013 に答える
5

してみてください:

  • マルチストリングを置き換える

    var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, ''); //str is "//.abc.xyz"

  • 複数の文字を置き換える

    var str = "a.b.c.d,e,f,g,h"; str = str.replace(/[.,]/g, ''); //str is "abcdefgh";

幸運を!

于 2017-11-16T09:45:18.420 に答える
4

複数の部分文字列を単純な正規表現に置き換えることができます。たとえば、数値(123) 456-7890を にしたい場合は、次の1234567890ようにできます。

var a = '(123) 456-7890';
var b = a.replace(/[() -]/g, '');
console.log(b); // results 1234567890

[] の間に置換する部分文字列を渡すことができ、代わりに使用する文字列を replace 関数の 2 番目のパラメーターとして渡す必要があります。

于 2021-04-01T11:12:47.443 に答える
4

これを試すこともできます:

function replaceStr(str, find, replace) {
    for (var i = 0; i < find.length; i++) {
        str = str.replace(new RegExp(find[i], 'gi'), replace[i]);
    }
    return str;
}

var text = "#here_is_the_one#";
var find = ["#","_"];
var replace = ['',' '];
text = replaceStr(text, find, replace);
console.log(text);

find検索replaceするテキストと置換するテキストを参照します。

これにより、大文字と小文字が区別されない文字が置き換えられます。それ以外の場合は、必要に応じて正規表現フラグを変更してください。例: 大文字と小文字を区別する場合は、次のように置き換えます。

new RegExp(find[i], 'g')
于 2016-03-29T05:38:15.137 に答える
2

何も置き換えない場合は、tckmn の回答が最適です。

一致に対応する特定の文字列に置き換える必要がある場合は、2 つの場所に新しい一致を追加することを覚えておく必要がないように、Voicu と Christophe の回答のバリエーションを示します。これにより、一致するものの重複が回避されます。

const replacements = {
  '’': "'",
  '“': '"',
  '”': '"',
  '—': '---',
  '–': '--',
};
const replacement_regex = new RegExp(Object
  .keys(replacements)
  // escape any regex literals found in the replacement keys:
  .map(e => e.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
  .join('|')
, 'g');
return text.replace(replacement_regex, e => replacements[e]);
于 2020-11-13T10:51:02.880 に答える
2

次のように RegExp オブジェクトを replace メソッドに渡すこともできます

var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");

string.replace(regexHash, "").replace(regexUnderscore, " ");

Javascript 正規表現

于 2013-05-16T00:16:54.913 に答える
0

String.prototype.replaceAll=function(obj,keydata='key'){
 const keys=keydata.split('key');
return Object.entries(obj).reduce((a,[key,val])=> a.replace(new RegExp(`${keys[0]}${key}${keys[1]}`,'g'),val),this)
}

const data='hids dv sdc sd {yathin} {ok}'
console.log(data.replaceAll({yathin:12,ok:'hi'},'{key}'))

于 2020-07-02T09:04:38.023 に答える
-1

これは、「reduce」複数置換関数を使用した「安全な HTML」関数です (この関数は、各置換を文字列全体に適用するため、置換間の依存関係が重要です)。

// Test:
document.write(SafeHTML('<div>\n\
    x</div>'));

function SafeHTML(str)
    {
    const replacements = [
        {'&':'&amp;'},
        {'<':'&lt;'},
        {'>':'&gt;'},
        {'"':'&quot;'},
        {"'":'&apos;'},
        {'`':'&grave;'},
        {'\n':'<br>'},
        {' ':'&nbsp;'}
        ];
    return replaceManyStr(replacements,str);
    } // HTMLToSafeHTML

function replaceManyStr(replacements,str)
    {
    return replacements.reduce((accum,t) => accum.replace(new RegExp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]]),str);
    }
于 2019-09-07T15:00:29.943 に答える