Подтвердить что ты не робот

Преобразование "прямых котировок" в "Curly Quotes"

У меня есть приложение, которое использует механизм правил на основе Javascript. Мне нужен способ конвертировать обычные прямые цитаты в кудрявые (или умные) цитаты. Itd легко просто сделать string.replace для ["], только в этом случае будет вставлен только один случай фигурной цитаты.

Лучший способ, который я мог придумать, - заменить первое вхождение цитаты левой лепкой цитатой, а каждый другой - левой, а остальное - верным.

Есть ли способ выполнить это с помощью Javascript?

4b9b3361

Ответ 1

Вы можете заменить все, что предшествует символу слова левой цитатой, и все, что следует за символом слова с правильной цитатой.

str = str.replace(/"(?=\w|$)/g, "“");
str = str.replace(/(?<=\w|^)"/g, "&#8221;"); // IF the language supports look-
                                             // behind. Otherwise, see below.

Как указано в комментариях ниже, это не учитывает пунктуацию, но легко может:

/(?<=[\w,.?!\)]|^)"/g

[ Изменить:] Для языков, которые не поддерживают внешний вид, например Javascript, до тех пор, пока вы сначала замените все лицевые стороны, у вас есть два варианта:

str = str.replace(/"/g, "&#8221;"); // Replace the rest with right curly quotes
// or...
str = str.replace(/\b"/g, "&#8221;"); // Replace any quotes after a word
                                      // boundary with right curly quotes

(Я оставил исходное решение выше, если это полезно для кого-то, использующего язык, который поддерживает внешний вид)

Ответ 2

Возможно, вам захочется посмотреть, что Pandoc - по-видимому, с опцией --smart, он правильно обрабатывает кавычки во всех случаях (включая, например, tis и twere).

Недавно я написал механизм препритивления типографики Javascript, который, среди прочего, цитирует замену; Я закончил использовать в основном алгоритм, предложенный Renesis, но theres в настоящее время неудачный тест, ожидающий более разумного решения.

Если вы заинтересованы в скрипунге моего кода (и/или отправке патча на основе выполненной работы), проверьте его: jsPrettify. jsprettify.prettifyStr делает то, что вы ищете. Если вы не хотите иметь дело с зависимостью Closure, theres более старая версия, которая запускается сама по себе - она ​​даже работает в Rhino.

Ответ 3

'foo "foo bar" "bar"'.replace(/"([-a-zA-Z0-9 ]+)"/g, function(wholeMatch, m1){
    return """ + m1 + """;
});

Ответ 4

Следующие просто изменяют каждую цитату путем чередования (этот конкретный пример, однако, не учитывал бы осиротевшие кавычки).

str.replace(/\"([^\"]*)\"/gi,"&#8220;$1&#8221;");

Работает отлично, если текст, который вы текстурируете, еще не прикручен неправильным использованием двойной кавычки. На английском языке котировки никогда не вложены.

Ответ 5

Спасибо. Сделать это с помощью PHP: http://pastebin.com/CEK0NN43

Противоположность JavaScript: http://www.kevinkorb.com/post/37

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

Ответ 6

Я не думаю, что что-то подобное вообще легко, потому что вам нужно будет точно понимать, что означает каждый символ двойной кавычки в вашем контенте. Тем не менее, я бы хотел собрать все текстовые узлы, которые меня интересовали, а затем пройти и отслеживать природу каждого экземпляра двойной кавычки "вкл/выкл" (или "нечетный/четный" ). Затем вы можете узнать, какой заменяющий объект использовать.

Ответ 7

Я не нашел логику, которую я хотел здесь, поэтому вот то, с чем я закончил.

value = value.replace(/(^|\s)(")/g, "$1""); // replace quotes that start a line or follow spaces
value = value.replace(/"/g, """); // replace rest of quotes with the back smart quote

У меня есть небольшая текстовая область, в которой мне нужно заменить прямые кавычки кудрявыми (умными) кавычками. Я просто выполняю эту логику на клавиатуре. Я пытался заставить его вести себя как Microsoft Word.

Ответ 8

Проводка для потомков.

Как было предложено @Steven Dee, я пошел в Pandoc.

Я пытаюсь использовать зрелый и проверенный инструмент, когда только могу, и выпекать собственное регулярное выражение. Ручное регулярное выражение может быть слишком жадным или не достаточно жадным, и они могут не быть чувствительными к границам слов и запятым и т.д. Pandoc учитывает большинство из этого и более.

Из командной строки (параметр -smart включает интеллектуальные кавычки):

pandoc --smart --standalone -o output.html input.html

.. и я знаю, что командная строка script может или не может соответствовать требованиям OP для использования Javascript. (related: Как выполнить команду оболочки в Javascript)