2

変わりたい

すべての一重引用符を二重引用符に、すべての二重引用符を一重引用符に

jqueryまたはjsで。

var myString = " tes't tes\"t tes\"t te'st ";
console.log(myString);

for (i = 0; i < myString.length; i++) {
    console.log(myString[i]);
    if (myString[i] == "'") {
        myString[i] == "\"";
            continue;
    }
    if (myString[i] == "\"") {
        myString[i] == "'";
            continue;
    }
}

console.log(myString);

しかし、私の機能はうまく機能していません。私を修正してください。

4

5 に答える 5

3

s内ではif、代入 ( myString[i] == "\"";) ではなく比較を行っています。これはおそらく単一の=. 唯一の問題は、文字列が不変であるため、これが期待どおりに機能しないことです。解決策、新しい文字列を作成します。

function flipQuotes(str) {
  var result = [], i = 0, lim = str.length, c;

  for (; i < lim; i += 1) {
    c = str.charAt(i);
    switch(c) {
      case '"':
        result.push("'");
        break;

      case "'":
        result.push('"');
        break;

      default:
        result.push(c);
    }
  }

  return result.join('');
}

var myString = " tes't tes\"t tes\"t te'st ";
console.log(
  flipQuotes(myString) // => ' tes"t tes't tes't te"st '
);
于 2013-01-15T09:49:31.297 に答える
2

評価ではなく、比較を行っています。また、その方法で文字列を変更することはできません。新しい文字列を作成する必要があります。

var myString = " tes't tes\"t tes\"t te'st ";
    console.log(myString);
    var str = [];

    for (i = 0; i < myString.length; i++) {
        console.log(myString[i]);
        if (myString[i] == "'") {
            str.push("\"");
        }
        else if (myString[i] == "\"") {
            str.push("'");
            continue;
        }
       else
      {
        str.push(myString[i]);
      }
    }
    str.join("");

    console.log(str);

このライブデモで確認してください

于 2013-01-15T09:48:38.100 に答える
1

演算子の不適切な使用に加えて==、コードに別の問題があります。

myString[i]文字列のi 番目の文字を取得するために使用できます (ほとんどのブラウザーで)。ただし、その文字を「変更」するために使用することはできません。これはうまくいきます:

var a = myString[i];

これはしません:

myString[i] = a;

これはあなたのコードで、マイナーな変更に加えて、文字列の文字を読み取って変更するためにcharAtandを使用して書き直されています。substring

var myString = " tes't tes\"t tes\"t te'st ";
console.log(myString);
for (i = 0; i < myString.length; i++) {
    if (myString.charAt(i) == "'") {
        myString = myString.substring(0, i) + '"' + myString.substring(i + 1);
    } else if (myString.charAt(i) == '"') {
        myString = myString.substring(0, i) + "'" + myString.substring(i + 1);
    }
}
console.log(myString);
于 2013-01-15T09:54:28.400 に答える
1

別のアプローチを使用したもう1つのソリューションを次に示します。

var myString = " tes't t%es\"t tes\"t te'st ",
result = myString.replace(/%/g, '\\%')
.replace(/'/g, '%')
.replace(/"/g, "'")
.replace(/[^\\]%/g, function (m) {
   return m[0] + '"';
})
.replace('\\%', '%');
于 2013-01-15T09:59:14.013 に答える
1

まず、文字列は不変であり、文字列に対する操作は.replace()実際に新しい文字列を返します。次のことはできません。

myString[ i ] = "x";

あなたの他の間違いは、比較演算子を代入演算子として使用していたことです。

myString[ i ] == "x";

これを知った上で、新しい文字列を作成し、 の値をmyString新しい値に置き換える必要があります。文字列を構築する 1 つの方法は、.split('')メソッドを使用して文字列の配列表現を作成し、配列に対してミューテーションを実行してから、配列のメソッドを使用して文字列に戻すこと.join('')です。

var myString = " tes't tes\"t tes\"t te'st ";
var tokens = myString.split('');

for (i = 0; i < tokens.length; i++) {
  if (tokens[i] == "'") {
    tokens[i] = "\"";
    continue;
  }
  if (tokens[i] == "\"") {
    tokens[i] = "'";
    continue;
  }
}
myString = tokens.join('');
console.log(myString);
于 2013-01-15T10:02:22.253 に答える