Как уменьшить длину строки



  • Добрый день. Надо скопировать абзац или несколько текста. Но с этого текста короткую строчку (например 5 слов, или 30 символов) надо вставить в заголовок.
    Как можно обрезать длинную строчную переменную? Спасибо за ответ.



  • @weq
    Навскидку вижу 2 решения:

    1. Дергаем первые 5 слов из строки регуляркой
      ([\S]+\ [\S]+\ [\S]+\ [\S]+\ [\S]+)[\s\S]+
      Число повторов " [\S]+" равно количеству слов, которые необходимо извлечь.
      Возможно (теоретически) составить регулярку попроще.
    2. Парсим строку по разделителю пробел и собираем новую строку заново из нужного количества элементов полученного списка.


  • Спасибо! То что нужно. А если в строке будет меньше слов чем в регулярке прописано, будет ошибка?
    Где можно почитать о такие регулярные поженимся? Спасибо за ответ



  • @weq said in Как уменьшить длину строки:

    о такие регулярные поженимся

    Не. Жениться пока не готов.

    @weq said in Как уменьшить длину строки:

    А если в строке будет меньше слов чем в регулярке прописано, будет ошибка?

    Технической ошибки не будет. Просто регулярка ничего не дернет. Т.е. ошибка будет логической. Тут нужно написать более мощную регулярку, которую лично мне скилов написать не хватает ) Буду рад, если гуру помогут =)
    Либо используйте второй, предложенный мной способ. Вы сможете подсчитать количество полученных слов и определить действия в зависимости от полученного значения.



  • @weq как вариант используйте яваскрипт

    alt text

    У меня на скрине первые 5 символов, вы же можете установить столько сколько вам необходимо!

    [[NEW_VARIABLE]].substring(0, 5);
    


  • @weq
    если по кол-во символов, то вот: в выполнить код добавляйте

    [[TEXT]] = "Надо скопировать абзац или несколько текста"
    [[RES]] = String([[TEXT]]).slice(0,30)
    

    Регуляркой тоже самое:

    .{0,30}
    

    А по поводу слов, у @xclsv хороший пример

    ^[^\s]*$        //соответствует одному ключевому слову
    ^[^\s]*\s[^\s]*$    //соответствует фразе из 2 ключевых слов
    ^[^\s]*\s[^\s]*     //соответствует фразе, содержащей по крайней мере 2 кючевых слова
    ^([^\s]*\s){2}[^\s]*$    //соответствует фразе из 3 ключевых слов
    ^([^\s]*\s){4}[^\s]*    //соответствует фразе из 5 и более ключевых слов
    


  • @uraabk said in Как уменьшить длину строки:

    ^[^\s]$ //соответствует одному ключевому слову
    ^[^\s]
    \s[^\s]$ //соответствует фразе из 2 ключевых слов
    ^[^\s]
    \s[^\s]* //соответствует фразе, содержащей по крайней мере 2 кючевых слова
    ^([^\s]\s){2}[^\s]$ //соответствует фразе из 3 ключевых слов
    ^([^\s]\s){4}[^\s] //соответствует фразе из 5 и более ключевых слов

    Слушай, подскажи, а можно такую регулярку составить, которая дернет не более 5 первых слов в строке?
    Ну т.е. если в строке больше 5 слов, то дергать 5 слов. Если меньше, то всю строку.
    Или только через предварительную проверку?



  • @xclsv said in Как уменьшить длину строки:

    Буду рад, если гуру помогут =)

    Надо дополнительный бейджи на форуме сделать и выдавать за заслуги, ну или проступки :D.


    Можно чуть подправить вашу регулярку:

    ((?:[\S]+\ ){1,5})[\s\S]+
    

    так проще регулировать количество возможных слов от одного, до пяти {1,5}.


    Но я бы проще обрезал строку на 30 символов, затем обрезал полученную строку на последнем пробеле, чтобы убрать обрубки слов:

    [[NEW_TEXT]] = [[TEXT]].slice(0, 30).split(" ").slice(0,-1).join(" ")
    

    Вот тестовый скрипт



  • @xclsv вот это вроде как работает. Если меньше, берет меньше, если 5 - берет пять.

    ^([^\s]*\s){0,5}
    


  • @fox said in Как уменьшить длину строки:

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

    Давно надо было такое реализовать. А за большую помощь (к примеру разработку полезного модуля) выдавать премиум или хорошую скидку)


Log in to reply
 

  • 7
  • 9
  • 4
  • 4
  • 3
  • 7
  • 40
  • 2