Ищу генератор строк в кавычках - PullRequest
0 голосов
/ 29 июня 2010

Кто-нибудь знает о бесплатном веб-сайте или программе, которая берет строку и выводит ее в кавычки с соответствующими управляющими символами?

Скажем, например, что я хочу процитировать

It's often said that "devs don't know how to quote nested "quoted strings"".

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

Ответы [ 4 ]

2 голосов
/ 29 июня 2010

Если ни одна из двойных кавычек в строке не экранирована, вы можете просто сделать:

str = str.replace(/"/g, "\\\"");

В противном случае вам следует проверить, не сбежал ли он, и заменить только, если это не так; Вы можете использовать lookbehind для этого. Следующее - то, что пришло мне в голову первым, но это не сработало бы для строк типа escaped backslash followed by quotes \\" :(

str = str.replace(/(?<!\\)"/g, "\\\"");

Следующее гарантирует, что второй последний символ, если он существует, не является обратной косой чертой.

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

Обновление: только что вспомнил, что JavaScript не поддерживает просмотр ; вы можете использовать то же регулярное выражение в вспомогательном движке регулярных выражений, таком как perl / php / .net и т. д.

2 голосов
/ 29 июня 2010

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

  • Perl имеет функцию quotemeta
  • Оболочка C ++ PCRE имеет функцию RE::QuoteMeta (предупреждение: гигантский файл по этой ссылке), что делает то же самое
  • PHP имеет preg_quote, если вы используете регулярные выражения, совместимые с Perl
  • Модуль Python * re имеет escape функцию
  • В Java класс java.util.regex.Pattern имеет quote метод
  • Perl и большинство других механизмов регулярных выражений, основанных на Perl, имеют метасимволы \Q...\E, что означает, что все, что находится между \Q и \E, интерпретируется буквально
  • Большинство инструментов, использующих регулярные выражения POSIX (например, grep) имеет опцию, которая заставляет их интерпретировать свой ввод как буквенную строку (например, grep -F)
1 голос
/ 29 июня 2010

В Python для заключения в одинарные кавычки:

import re
mystr = """It's often said that "devs don't know how to quote nested "quoted strings""."""
print("""'%s'""" % re.sub("'", r"\'", mystr))

Вывод:

'It\'s often said that "devs don\'t know how to quote nested "quoted strings"".'

Вы можете легко адаптировать это в более общую форму и / или обернуть вскрипт для вызова из командной строки.

0 голосов
/ 02 июля 2010

так что, я думаю, ответ "нет".Извините, ребята, но я не узнал ничего, чего не знаю.Возможно, я виноват в том, что неправильно сформулировал вопрос.

+ 1 для всех, кто написал

...