Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2015, 14:08
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Как распознать экранированные символы ("a" vs "\a")?
Всем привет. Как отличить "a" от "\a"?

Если конкретно, мне нужно разбить строку:
'x.y'.split('.'); // ['x', 'y']


А так, не должно разбивать:
'x\.y'.split('.'); // должно быть ['x.y']


Сам сплит можно заменить чем угодно (регуляркой, например).

String.raw не предлагать.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2015, 14:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Так "a" от "\a" нужно различить или же "." от "\."?
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2015, 14:53
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от laimas
Так "a" от "\a" нужно различить или же "." от "\."?
Точку. "a" - это обобщение.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2015, 15:09
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

вариант
Код:
if re.test(string) then string.split()
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2015, 15:16
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

nerv_, проблема в том, что
"string." === "string\."

Мне прислали багрепорт, а как пофиксить, без добавления флагов, я пока не понимаю.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности

Последний раз редактировалось FINoM, 04.12.2015 в 15:48.
Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2015, 16:21
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

сплитом, похоже, никак.

вот, вариант, в котором есть экранирование точек и "экранирование экранирований"

var str = "12.34\\.56\\\\.78\\\\\\.90";
var m, rx = /(?:^|[^\\])(?:\\\\)*\./g;

var index = 0;
var arr = [];
while (m = rx.test(str)) {
  arr.push(str.substring(index, rx.lastIndex - 1));
  index = rx.lastIndex;
}
arr.push(str.substring(index, str.length));

console.log(arr);
Ответить с цитированием
  #7 (permalink)  
Старый 04.12.2015, 16:24
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Яростный Меч
экранирование экранирований
Ну это жесть.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 04.12.2015, 16:26
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от FINoM Посмотреть сообщение
Ну это жесть.
это не жесть, это "жисть" )
так уж мир устроен, что оное есть везде где имеются экранирования.
Ответить с цитированием
  #9 (permalink)  
Старый 04.12.2015, 17:21
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Как отличить "a" от "\a"
Никак. Экранирование происходит на этапе обработки литерала, так что только экранированием экранирования.

Для меньшей жести юзер может использовать String.raw + template strings из ES6, вот так:
app.bindNode(String.raw`int\.int`, String.raw`\.int`);

Этот код аналогичен такому:
app.bindNode("int\\.int", "\\.int");
Ответить с цитированием
  #10 (permalink)  
Старый 04.12.2015, 17:25
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Erolast
Для меньшей жести юзер может использовать String.raw + template strings из ES6, вот так
Ну тогда возникает меньшее зло, но все же зло: не получится использовать путь к свойству, который включает слеш в конце. Это, конечно же, первое, что мне пришло в голову.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из строки ненужные символы? PAMAC Общие вопросы Javascript 5 28.05.2017 17:35
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как удалить из строки ненужные символы? PAMAC Серверные языки и технологии 4 23.02.2011 17:45
Как обрезать строку и добавить символы в середине, в зависимости от длинны строки andreyua Firefox/Mozilla 12 10.12.2010 15:44
Как распознать текст? monach79 Общие вопросы Javascript 12 21.07.2008 13:22