Вставить конкретное письмо из строки в рубине

Поскольку никакой ответ явно не предоставил простой фрагмент кода для использования RegExp, вот моя попытка:

function compareInsensitive(str1, str2){ 
  return typeof str1 === 'string' && 
    typeof str2 === 'string' && 
    new RegExp("^" + str1.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "$", "i").test(str2);
}

Он имеет ряд преимуществ:

  1. Проверяет тип параметра (любой нестроковый параметр, например, undefined, например, вырвал бы выражение, подобное str1.toUpperCase()).
  2. Не страдает от возможных проблем интернационализации.
  3. Сбрасывает RegExp.
1
задан Sergio Tulentsev 13 July 2018 в 12:00
поделиться

1 ответ

str.gsub('ja', 'jA')
str.gsub(/(?<=j).{1}/) { |char| char.capitalize } #for any char that coming after 'j'

Подробнее о gsub и больше о regexp

6
ответ дан Leo 17 August 2018 в 12:59
поделиться
  • 1
    Спасибо, приятель, я забыл о gsub на мгновение: -P, но вы напоминаете мне. – Ashish Jambhulkar 13 July 2018 в 12:00
  • 2
    @Leo str.gsub(/(?<=j).{1}/) { |char| char == 'a' ? 'A' : char} делать только для 'a' – kiddorails 13 July 2018 в 12:01
  • 3
    @kiddorails, да. Второй пример для отображения может быть более динамичным. Для a = & gt; str.gsub(/(?<=j)a{1}/) { |char| char.capitalize }. Спасибо, я уточню свой ответ. – Leo 13 July 2018 в 12:08
  • 4
    Не нужно помещать {1} в шаблон – Tom Lord 13 July 2018 в 12:56
  • 5
    Кроме того, (?<=j)\p{lower} может быть более логичным, так как воссоздание числа, пробел или пунктуация или уже написанное письмо, вероятно, не имеет большого смысла. – engineersmnky 13 July 2018 в 12:57
Другие вопросы по тегам:

Похожие вопросы: