2

この特定の状況で、文字列の最初と最後にあるすべてのスペースをアンダースコアに置き換えたい:

var a = '   ## ## #  ';
console.log(myReplace(a)); // prints ___## ## #__

つまり、最初の # の前の文字列の先頭にあるすべてのスペースと、最後の # の後のすべてのスペース、その他すべて (文字列の途中のスペースを含む) は変更されません。

私の最初の考えは、問題の各部分に 1 つずつ、2 つの Reg Exp を使用することでした。

ただし、最初のものを取得できませんでした。JS 正規表現を使用してやりたいことを実行できるかどうかさえわかりません。

str.replace(/^\ /g, '_'); // replaces only the first space
str.replace(/^\ +/, '_') //  replaces all the correct spaces with only one underscore

ありがとう!

4

4 に答える 4

2

これは JavaScript では難しいです。ECMAScript 6 では/[ ]/y、一致が隣接している必要がある which を使用できるため、スペースを 1 つずつ一致させることができますが、最初の非スペースを通過しないようにしてください。文字列の最後には、(いずれにせよ) を使用できます/[ ](?=[ ]*$)/

ECMAScript 5 (おそらくより関連性が高い) の場合、最も簡単な方法は、代替コールバックを使用することです。

str = str.replace(
    /^[ ]+|[ ]+$/g,
    function(match) {
        return new Array(match.length + 1).join("_");
    }
);

これにより、プログラムによってスペースの数が読み取られ、同じ数のアンダースコアが書き戻されます。

于 2013-08-28T17:57:15.453 に答える
1

JavaScript の質問には明らかに答えていないため、この回答を削除しました。将来の検索者が文字列の末尾にある空白を取得する正規表現の方法を見つけることができるように、削除を取り消しています。

これはあなたの質問に正しく答えていませんが、他の人にとっては役立つかもしれません

この正規表現は、文字列の最初と最後にあるすべての空白に一致します。

^(\s*).*?(\s*)$

キャプチャ グループをアンダースコアに置き換えるだけです。

于 2013-08-28T17:55:20.267 に答える