Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   В регулярном выражении обозначить границу символа (https://javascript.ru/forum/misc/71054-v-regulyarnom-vyrazhenii-oboznachit-granicu-simvola.html)

Heger 23.10.2017 02:36

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

Суть - нужно обозначить в регулярном выражении границу символа, тоесть найти точное вхождение например точки . или трех точек ...
Например:
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 не вариант, ибо ... может быть в конце строки где нет пробела

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

ksa 23.10.2017 09:18

Цитата:

Сообщение от Heger
троеточие ... второе по счету и последнее в переменной text не находит, как их найти?

Оно?
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...';
var matches = text.match(/\.{3}(?=$|[^\.])/gi);
alert(matches);

Heger 23.10.2017 12:29

Цитата:

Сообщение от ksa (Сообщение 467962)
Оно?
var text = 'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...';
var matches = text.match(/\.{3}(?=$|[^\.])/gi);
alert(matches);

Не совсем, здесь вы находите все троеточия, а нужно именно точное вхождение, тоесть те троеточия где сбоку либо пробелы, либо конец или начало строки

рони 23.10.2017 12:49

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);

Белый шум 23.10.2017 17:00

var s='\\.\\.\\.';
'Lorem ...ipsum ... dolor sit amet, consectetur adipisicing elit. Libero, placeat... ...'.match(RegExp('(?:^|\\s)'+s+'(?=\\s|$)', 'g')).map(function(s){return s.replace(/^ /, '')});

Nexus 23.10.2017 17:48

Цитата:

Сообщение от Белый шум (Сообщение 468011)
var s='\\.\\.\\.';
'...'.match(RegExp('(?:^|\\s)'+s+'(?=\\s|$)', 'g')).map(function(s){return s.replace(/^ /, '')});

Я бы долго разбирался, что делает этот код, если бы встретил его в проекте.
----
Цитата:

Для устранения выявленной ошибки было принято решение использовать регулярные выражения. После этого ошибок стало несколько.

Белый шум 23.10.2017 18:32

Художника обидеть может каждый... %)


Часовой пояс GMT +3, время: 06:45.