Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2017, 02:36
Интересующийся
Отправить личное сообщение для Heger Посмотреть профиль Найти все сообщения от Heger
 
Регистрация: 10.12.2011
Сообщений: 10

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

Суть - нужно обозначить в регулярном выражении границу символа, тоесть найти точное вхождение например точки . или трех точек ...
Например:
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...'; //то где ищем
var searching_text = '...'; // то что ищем с точным вхождением - вводит пользователь, может ввести слово или символ или набор символов или даже пробел что угодно
var temp_patt = new RegExp(/\W/, 'g'); //предварительно выражение для не слова (символов) чтобы их потом экранировать
var searching_text = searching_text.replace(temp_patt, '\\$&'); //символы экранирую, тоесть если в searching_text было ..., то стало \.\.\.
var pattern = new RegExp('\\b'+searching_text+'\\b', 'gi');
var matches = text.match(pattern);// и далее по коду
console.log(matches);

так вот все мы знаем что \\b обозначает границу СЛОВА, а мне нужно обозначить границу СИМВОЛА, например границу ...
Тоесть например слово sit находит, а троеточие ... второе по счету и последнее в переменной text не находит, как только их (точное вхождение) найти?
Разумеется вставлять \\s вместо \\b не вариант, ибо ... может быть в конце строки где нет пробела

У кого какие мысли?

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

Сообщение от Heger
троеточие ... второе по счету и последнее в переменной text не находит, как их найти?
Оно?
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...';
var matches = text.match(/\.{3}(?=$|[^\.])/gi);
alert(matches);
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2017, 12:29
Интересующийся
Отправить личное сообщение для Heger Посмотреть профиль Найти все сообщения от Heger
 
Регистрация: 10.12.2011
Сообщений: 10

Сообщение от ksa Посмотреть сообщение
Оно?
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...';
var matches = text.match(/\.{3}(?=$|[^\.])/gi);
alert(matches);
Не совсем, здесь вы находите все троеточия, а нужно именно точное вхождение, тоесть те троеточия где сбоку либо пробелы, либо конец или начало строки
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2017, 12:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Heger,
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...'; //то где ищем
var searching_text = '...';
function escapeRegExp(string){
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
searching_text = escapeRegExp(searching_text); //символы экранирую, тоесть если в searching_text было ..., то стало \.\.\.
var pattern = new RegExp('^'+searching_text+'$', 'gi');
var matches = (text.match(/\S+/g)||[]).filter(function(a) {
   pattern.lastIndex = 0;
   return pattern.test(a)
});
console.log(matches);
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2017, 17:00
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

var s='\\.\\.\\.';
'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...'.match(RegExp('(?:^|\\s)'+s+'(?=\\s|$)', 'g')).map(function(s){return s.replace(/^ /, '')});
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2017, 17:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Сообщение от Белый шум Посмотреть сообщение
var s='\\.\\.\\.';
'...'.match(RegExp('(?:^|\\s)'+s+'(?=\\s|$)', 'g')).map(function(s){return s.replace(/^ /, '')});
Я бы долго разбирался, что делает этот код, если бы встретил его в проекте.
----
Цитата:
Для устранения выявленной ошибки было принято решение использовать регулярные выражения. После этого ошибок стало несколько.
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2017, 18:32
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Художника обидеть может каждый... %)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пробел в регулярном выражении N1kS Общие вопросы Javascript 5 25.06.2016 15:59
Помощь в регулярном выражении! celkabelka Общие вопросы Javascript 5 13.04.2013 17:53
Способ реализации позитивного просмотра в перед в регулярном выражении kichSman Общие вопросы Javascript 10 11.04.2012 21:19
Как в регулярном выражении обозначается "может быть а может и не быть" ? [MI_nor] Общие вопросы Javascript 4 30.11.2011 21:09
количество повторений в регулярном выражении mrWong Общие вопросы Javascript 2 10.02.2010 12:57