2017-02-20 46 views
0

Немой цитатой являются те, которые появляются прямо. Умные кавычки скручиваются, и они скручиваются в правильном направлении. Я считаю, что следующие правила:Regex Puzzle: как заменить тупые цитаты на умные

  • Если цитата находится в начале слова, она закручивается вправо.
  • Если цитата в начале слова протекали другую цитату или группировки символов ({[закручивается вправо.
  • Если цитата нигде закручивается налево.

Мне нужен сценарий который принимает переменную держит строку и заменяет все прямые цитаты с правильно керлинг из них.

This имеет соответствующие ресурсы для различных кодов символов.

var replacedText = text.replace(/"(?=[a-zA-Z])/gi,"\u201C"); 
var replacedText = replacedText.replace(/'(?=[a-zA-Z])/gi,"\u2018"); 

Например, вышеизложенное работает с точки зрения синтаксиса, и я полагаю, что хорошо структурированная серия замен могла бы работать. Но я изо всех сил пытаюсь понять логику. Поскольку я хочу заменить одиночные и двойные кавычки, и я хочу их разумно заменить, чтобы они «открывались» и «закрывались» в правильном направлении.

+0

Примеры с их желаемым выходом, если вы можете! –

+0

Трудно привести пример, потому что SO преобразует все цитаты в немые цитаты. Но цель должна быть достаточно ясной из вопроса. – COMisHARD

+0

Что такое «тупые цитаты» и «умные цитаты» ??? –

ответ

2

Возможно, это отправная точка? То, что я здесь делал, в основном просто предполагает пространство перед первым котировочным знаком ИЛИ, если кавычек находится в начале строки, это начало сообщения «quote». Затем я перехожу, пока не появится закрывающая кавычка. Опять же, просто начало. Не уверен, если это квалифицирует все те вещи, которые вы упомянули:

var sample = 'One guy walks into a bar and says, "Dude, whaddup?".'; 

sample.replace(/(\s|^)\"([^\"]+)\"/g, "$1\u201C$2\u201D") 
// should return: One guy walks into a bar and says, “Dude, whaddup?”. 

var sample2 = '"E=mc2" is Eistein\'s signature'; 

sample2.replace(/(\s|^)\"([^\"]+)\"/g, "$1\u201C$2\u201D") 
// should return: “E=mc2” is Eistein's signature. 

Я объясню это более подробно, я думаю, для обучения сакэ ...

(\s|^)\" захватывает любое пространство или в начале строки, то цитата знак

([^\"])+ захвата любой символ, который не является котировка (предполагая, что все между кавычками в строке.

\" является endin g котировочный знак

Затем я разместил умные кавычки с захваченной средней струной и вуалой! Надеюсь, это поможет!

+0

Это отлично подходит для двойных кавычек. Но одиночные немного сложнее. Любые идеи о том, как лучше всего идентифицировать одиночные пары одинарных кавычек и преобразовать их так же, как и вы, И обрабатывать кавычки, используемые в качестве апострофов внутри слова, как в «не может» – COMisHARD

+0

@COMisHARD Итак, я бы предположил, что в таких случаях, как «can 't ", тогда вам просто нужно заменить все апострофы, которые появляются после того, как письмо будет закрывающейся одинарной цитатой, и никогда наоборот? В этом случае я связываю другую «замену». Итак, что-то вроде этого '' .replace (/ ([A-Za-z]) \ '/ g, "$ 1 \ u2019") '' '... Кстати, если вы конвертируете кавычки с одной кавычкой, вы следует связать это предложение 'replace' ПОСЛЕ этого пункта – josephnvu