5

の間を除いてすべてのスペースを削除する必要がある文字列があります""。これが、スペースを取り除くために使用している正規表現です。

str.replace(/\s/g, "");

引用符の間のスペースを無視する方法がわからないようです。例

str = 'Here is my example "leave spaces here", ok im done'
Output = 'Hereismyexample"leave spaces here",okimdone'
4

3 に答える 3

8
var output = input.split('"').map(function(v,i){
   return i%2 ? v : v.replace(/\s/g, "");
}).join('"');

名前が大文字で始まる変数を使用してコードを記述できないため、特に言語の標準コンストラクターである場合は、変数の名前を変更したことに注意してください。疑問がある場合は、これらのガイドラインに従うことをお勧めします。

于 2013-01-26T18:28:00.143 に答える
8

それを行う別の方法。これは、文字列の二重引用符で囲まれた部分内でのエスケープが許可されていないことを前提としています(たとえば、no "leave \" space \" here")が、それを許可するように簡単に変更できます。

str.replace(/([^"]+)|("[^"]+")/g, function($0, $1, $2) {
    if ($1) {
        return $1.replace(/\s/g, '');
    } else {
        return $2; 
    } 
});

"引用符で囲まれた文字列内でエスケープできるように正規表現を変更しました。

/([^"]+)|("(?:[^"\\]|\\.)+")/
于 2013-01-26T18:47:35.577 に答える
4

replaceロブ、この質問を復活させたのは、2回ではなく、1回の呼び出しで済む単純な解決策があったからです。(正規表現の報奨金クエストの調査を行っているときに質問が見つかりました。)

正規表現は非常に短いです:

"[^"]+"|( )

交互の左側は、引用符で囲まれた完全な文字列と一致します。これらの一致は無視されます。右側はグループ1と一致してスペースをキャプチャしますが、左側の式と一致しなかったため、スペースが右側にあることがわかります。

動作するコードは次のとおりです(デモを参照)。

var subject = 'Here is my example "leave spaces here", ok im done';
var regex = /"[^"]+"|( )/g;
replaced = subject.replace(regex, function(m, group1) {
    if (group1 == "" ) return m;
    else return "";
});
document.write(replaced);

参照

  1. 状況s1、s2、s3を除いてパターンを一致させる方法
  2. ない限りパターンを一致させる方法...
于 2014-05-19T22:30:14.660 に答える