Как распознать экранированные символы ("a" vs "\a")?
Всем привет. Как отличить "a" от "\a"?
Если конкретно, мне нужно разбить строку: 'x.y'.split('.'); // ['x', 'y'] А так, не должно разбивать: 'x\.y'.split('.'); // должно быть ['x.y'] Сам сплит можно заменить чем угодно (регуляркой, например). String.raw не предлагать. |
Так "a" от "\a" нужно различить или же "." от "\."?
|
Цитата:
|
вариант
Код:
if re.test(string) then string.split() |
nerv_, проблема в том, что
"string." === "string\." Мне прислали багрепорт, а как пофиксить, без добавления флагов, я пока не понимаю. |
сплитом, похоже, никак.
вот, вариант, в котором есть экранирование точек и "экранирование экранирований" :) 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); |
Цитата:
|
Цитата:
так уж мир устроен, что оное есть везде где имеются экранирования. |
Цитата:
Для меньшей жести юзер может использовать String.raw + template strings из ES6, вот так: app.bindNode(String.raw`int\.int`, String.raw`\.int`); Этот код аналогичен такому: app.bindNode("int\\.int", "\\.int"); |
Цитата:
|
Цитата:
alert("string\.") // это экранирование точки; alert("string\\.") // это двойной обратный слеш; |
nerv_, ну а что человеку делать, если свойство заканчивается двойным обратным слешем?
"a\\.b"Он хочет именно так, без экранирования. |
FINoM, я говорю, что твой пример, процитированный мной выше, выдает истину потому, что обратный слеш воспринимается интерпретатором в данном случае как экранирование. Т.е. его просто нет в переменной/выводе.
По крайней мере мне так кажется :) Цитата:
Цитата:
alert("a\\.b"); |
Цитата:
|
Часовой пояс GMT +3, время: 00:56. |