Заменить метод не работает

Я хочу заменить умные кавычки, такие как , , " и " на обычные кавычки. Кроме того, я хотел заменить ©, ® и . Я использовал следующий код. Но это не помогает. Пожалуйста, помогите мне решить эту проблему.

str.replace(/[""]/g, '"');
str.replace(/[‘’]/g, "'");

Ответ 1

Использование:

str = str.replace(/[""]/g, '"');
str = str.replace(/[‘’]/g, "'");

или сделать это в одном утверждении:

str = str.replace(/[""]/g, '"').replace(/[‘’]/g,"'");

В JavaScript (как и во многих других языках) строки неизменяемы - строковые "замещающие" методы фактически просто возвращают новую строку вместо изменения строки на месте.

ссылка на MDN JavaScript для replace:

Возвращает новую строку с некоторыми или всеми совпадениями шаблона, замененного заменой.

...

Этот метод не изменяет объект String, на который он вызывается. Он просто возвращает новую строку.

Ответ 2

replace вернуть результирующую строку

str = str.replace(/["']/, '');

Ответ 3

OP не говорит, почему он не работает, но, похоже, проблемы связаны с кодировкой файла. Если у меня есть ANSI-кодированный файл, и я делаю:

var s = ""This is a test" ‘Another test’";
s = s.replace(/[""]/g, '"').replace(/[‘’]/g,"'");
document.writeln(s);

Я получаю:

"This is a test" "Another test"

Я преобразовал кодировку в UTF-8, исправил умные кавычки (которые сломались, когда я изменил кодировку), а затем преобразован обратно в ANSI, и проблема исчезла.

Обратите внимание, что когда я копировал и вставлял двойные и одиночные смарт-цитаты с этой страницы в свой тестовый документ (кодированный ANSI) и запускал этот код:

var s = ""This is a test" ‘Another test’";
for (var i = 0; i < s.length; i++) {
    document.writeln(s.charAt(i) + '=' + s.charCodeAt(i));
}

Я обнаружил, что все умные кавычки появились как ? = 63.

Итак, в OP определите, где происходят интеллектуальные кавычки, и убедитесь, что они являются кодами символов, которые вы ожидаете от них. Если это не так, подумайте об изменении кодировки источника, чтобы они пришли как " = 8220, " = 8221, ‘ = 8216 и ’ = 8217. Используйте мой цикл для проверки источника, если смарт-кавычки отображаются с любыми значениями charCodeAt(), отличными от перечисленных мной, replace() не будет работать так, как написано.

Ответ 4

Чтобы заменить все обычные кавычки на интеллектуальные кавычки, я использую аналогичную функцию. Вы должны указать CharCode, так как некоторые настройки компьютеров/браузеров по умолчанию могут идентифицировать простые символы по-разному ( ",", "," ).

Использование CharCode с вызовом символа ASCII, который устранит место для ошибок в разных браузерах и операционных системах. Это также полезно для двуязычного использования (акценты и т.д.).

Чтобы заменить смарт-кавычки одним типом

function unSmartQuotify(n){
    var name = n;
    var apos = String.fromCharCode(39);
    while (n.indexOf("'") > -1)
        name = name.replace("'" , apos);
    return name;
} 

Чтобы найти другие значения ASCII, которые могут вам понадобиться. Проверьте здесь.