Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2023, 18:16
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 142

Почему регулярка берет лишние элементы?
Есть текст :
#Yandex #Apple Chainlink выпустил новую платформу для разработчиков #Functions, которая предоставляет бесплатный доступ к готовым функциям оракулов, упрощая процесс создания децентрализованных приложений на #Blockchain #Chainlink #девелопмент


Есть регулярка : https://regex101.com/r/OsaFNu/1

Почему регулярка берет еще и #Apple , мне нужно чтоб брало только #Functions

См скрин:
й.jpg

Не могу добавить справа вот что : слева от искомого хештега ещё должно стоять: пробел словоБезСимвола# пробел

Последний раз редактировалось mik888em, 08.03.2023 в 18:51.
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2023, 18:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Если регулярка что-то "берет" - значит она так написана. Это аксиома.

Для получения правильной - нужно показать примеры строк и что из них хочется получить в итоге....
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2023, 18:50
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,709

Потому, что стоит флаг g
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2023, 19:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Сообщение от mik888em
справа от искомого хештега ещё должно стоять: пробел словоБезСимвола# пробел
Наверное еще "или начало строки"?

const str = '#Yandex #Apple Chainlink выпустил новую платформу для разработчиков #Functions, которая предоставляет бесплатный доступ к готовым функциям оракулов, упрощая процесс создания децентрализованных приложений на #Blockchain #Chainlink #девелопмент'
const re = /(?<=(?:^|\s)[a-zа-я]+\s)#[a-z]+/gi
alert(str.match(re))
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2023, 19:15
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 142

Сообщение от ksa Посмотреть сообщение
Наверное еще "или начало строки"?

const str = '#Yandex #Apple Chainlink выпустил новую платформу для разработчиков #Functions, которая предоставляет бесплатный доступ к готовым функциям оракулов, упрощая процесс создания децентрализованных приложений на #Blockchain #Chainlink #девелопмент'
const re = /(?<=(?:^|\s)[a-zа-я]+\s)#[a-z]+/gi
alert(str.match(re))
он лишнее так берет:
й2.jpg
Сейчас так пробую:
/(?!#[a-zA-Z0-9_]+\s+)(#[a-zA-Zа-яА-Я]+[,.!:?\s]*)(?=\s[a-zA-Zа-яА-Я])/g


Но если в тексте символ запятой убираю после #Functions, -> #Functions

то не ничего не находит, хотя по идее я в регулярке прописал что один из символов
,.!:?
может быть, а может и не быть
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2023, 19:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

mik888em,
const str = '#Yandex #Apple Chainlink выпустил новую платформу для разработчиков #Functions, которая предоставляет бесплатный доступ к готовым функциям оракулов, упрощая процесс создания децентрализованных приложений на #Blockchain #Chainlink #девелопмент'
const re = /(?<=\s\S+\s)#\S+\b/
alert(str.match(re))
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2023, 19:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Сообщение от mik888em
он лишнее так берет
А чем #Blockchain не угодил?
Впереди него слово без #...
Ответить с цитированием
  #8 (permalink)  
Старый 08.03.2023, 21:34
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 142

Дело в том что нужно более точное соответствие, потому что в вашей регулярке правая часть не прописана (что идёт после знаков препинания), а она должна быть прописана для точного соответствия (мне так нужно). Вот как тут на скрине:

Вот регулярка со скрина:
/(?!#[a-zA-Zа-яА-Я0-9_]+\s+)(#[a-zA-Zа-яА-Я]+)[,.!:?\s]?(\s[a-zA-Zа-яА-Я])/g


Но опять же, как только запятую из текста после #Functions мне стоит убрать и тогда регулярка не видит #Functions

А если запятую ставлю, то регулярка захватывает с искомым еще и лишние символы .

Вот что берет:
#Functions, к
то есть почему-то захватывает
, к
Ответить с цитированием
  #9 (permalink)  
Старый 08.03.2023, 22:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

mik888em,
чем не устраивает #6 ?
Ответить с цитированием
  #10 (permalink)  
Старый 09.03.2023, 00:22
Кандидат Javascript-наук
Отправить личное сообщение для mik888em Посмотреть профиль Найти все сообщения от mik888em
 
Регистрация: 21.06.2020
Сообщений: 142

Сообщение от рони Посмотреть сообщение
mik888em,
чем не устраивает #6 ?
извините, но не понял вашего вопроса
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему в батник не берет элементы из переменной? mik888em Оффтопик 1 20.01.2024 15:17
Почему когда элемент выводится на новую строку его дочерние элементы не появляются? BIOkefirchik Элементы интерфейса 2 29.08.2017 13:32
[title] - находит не все элементы, почему? 123456 jQuery 2 02.05.2017 14:54
Почему не работает регулярка? Armen Общие вопросы Javascript 2 21.07.2015 14:48
Почему jQuery не обрабатывает элементы со значением атрибутов "nodeType" ercling jQuery 1 08.01.2014 22:10