заменить символ в JavaScript - PullRequest
0 голосов
/ 10 июня 2009

Кто-нибудь знает, как я могу заменить эти 2 символа ниже из строки в код?

  • 'оставил одинарную кавычку в 100
  • 'правая одинарная кавычка в' '1006 *
  • "левая двойная кавычка в"
  • "правая двойная кавычка в"

Ответы [ 3 ]

1 голос
/ 10 июня 2009

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

function curlyQuotes(inp) {
    return inp.replace(/(\b)'/, "$1’")
              .replace(/'(\b)/, "‘$1")
              .replace(/(\b)"/, "$1”")
              .replace(/"(\b)/, "“$1")
}

curlyQuotes("'He said that he was \"busy\"', said O'reilly")
// ‘He said that he was “busy”', said O’reilly

Вы увидите, что второе 'не меняется должным образом.

1 голос
/ 10 июня 2009

Сложная часть - это определение апострофов, что приведет к путанице в числе одинарных кавычек.

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

Какой источник? Английский текст? Код

0 голосов
/ 25 марта 2010

Я недавно написал движок для предварительного оформления типографики под названием jsPrettify , который делает именно это. Вот версия только для кавычек алгоритма, который я использую (оригинал здесь ):

prettifyStr = function(text) {
  var e = {
    lsquo:  '\u2018',
    rsquo:  '\u2019',
    ldquo:  '\u201c',
    rdquo:  '\u201d',
  };
  var subs = [
    {pattern: "(^|[\\s\"])'",      replace: '$1' + e.lsquo},
    {pattern: '(^|[\\s-])"',       replace: '$1' + e.ldquo},
    {pattern: "'($|[\\s\"])?",     replace: e.rsquo + '$1'},
    {pattern: '"($|[\\s.,;:?!])',  replace: e.rdquo + '$1'}
  ];
  for (var i = 0; i < subs.length; i++) {
    var sub = subs[i];
    var pattern = new RegExp(sub.pattern, 'g');
    text = text.replace(pattern, sub.replace);
  };
  return text;
};
...