2010-06-21 2 views
1

Мне нужно преобразовать строки, вставленные в текстовую область, чтобы, если они были вставлены из MS Word, странные кавычки и апострофы, которые Word любит использовать, будут преобразованы в обычные одиночные и двойные кавычки. К сожалению, мой текстовый редактор, похоже, уже конвертирует такие кавычки, когда я сохраняю, поэтому любое регулярное выражение, которое я делаю, похоже, перепуталось. Так что-то вроде этогоescaping кавычки стиля MSWord в RegExp

string = string.replace(new RegExp("“", "g"), '"').replace(new RegExp("”", "g"), '"').replace(new RegExp("’", "g"), "'"); 

, похоже, не работает. (и я даже не знаю, будет ли он правильно размещаться здесь)

Как создать регулярное выражение, чтобы найти эти кавычки, используя все «обычные» символы? Предположительно, escape-последовательность? Я предпочитаю избегать «литерала» RegExp, даже если создание объектов происходит медленнее.

ответ

0

Попробуйте получать ASCII код из символов, которые вы хотите удалить, и использовать его вместо самого характера:

string = string.replace(new RegExp("\xe2\x80\x9c", "g"), '"').replace(new RegExp("\xe2\x80\x9d", "g"), '"').replace(new RegExp("\xe2\x80\x99", "g"), "'"); 

(я использовал Notepad ++ с HexEdit плагин, чтобы получить код)

Edit:
Подробнее см. По адресу http://www.regular-expressions.info/unicode.html.
Ваш код должен быть (надеюсь, я не смешивались коды ...):

string = string.replace(new RegExp("\u201c", "g"), '"').replace(new RegExp("\u201d", "g"), '"').replace(new RegExp("\u2019", "g"), "'"); 
+0

Это не похоже на работу. Если я проверю использование charCodeAt(), я получаю 8217, 8220 и 8221 в десятичной форме, что соответствует 2019 201C 201D в шестнадцатеричном формате. Не знаю, как сформировать регулярное выражение из этого. – rob

Смежные вопросы