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

ifs 中,你不是在做一个赋值 ( 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;

charAt这是您的代码,经过细微更改以及使用andsubstring来读取和更改字符串的字符而重新编写:

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

这是使用不同方法的另一种解决方案:

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新值。构造字符串的一种方法是使用.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 回答