Как достать "folder" и "asd/asd" из "\folder/asd\asd/"
Пользователь вбивает в input адрес. Он может написать
\folder/asd\asd/ \folder\asd\asd\ folder/asd/asd folder/asd\asd Мне нужно достать первое значение - т.е. "folder" и всё, что идёт после слеша, т.е. в данном случае, "asd/asd". Слеши могут быть и прямые и обратные, и те и другие вместе. Если разделить ещё можно через .split(/[\/\\]/), то вот с удалением слешей - сложности. chatgpt предложил вот такой вариант path = input.value.replace(/^\/+|\/+$/g, ''); но на выходе я получаю '\\folder/asd\\asd' Может быть вы предложите более простой вариант, даже и не со split |
accountnujen,
введите образец в input . <body> <input id="tx" name=""> <output id="out"> <script> tx.oninput = function() { let match = this.value.match(/([^\x5c\x2F]+)[\x5c\x2F]([^\x5c\x2F]+[\x5c\x2F][^\x5c\x2F]+)/) if(match) out.textContent = match.splice(1); } </script> </body> |
Цитата:
|
Цитата:
<textarea>\folder/asd\asd/ \folder\asd\asd\ folder/asd/asd folder/asd\asd</textarea> <script> let s = document.querySelector('textarea').value const a = s.split('\n') const re = /(?<=^[\\\/]?)(\w+)[\\\/](\w+[\\\/]\w+)(?=[\\\/]?$)/ s = a.map(v => v.match(re).slice(1)) alert(JSON.stringify(s, null, 2)) </script> |
Цитата:
Тогда так... <textarea>\folder/asd\asd/ \folder\asd\asd\ folder/asd/asd folder/asd\asd folder/goga</textarea> <script> let s = document.querySelector('textarea').value const a = s.split('\n') const re = /(?<=^[\\\/]?)(\w+)[\\\/](\w+([\\\/]\w+)?)(?=[\\\/]?$)/ s = a.map(v => v.match(re).slice(1, 3)) alert(JSON.stringify(s, null, 2)) </script> |
Цитата:
// обратный слеш в строках массива экранирован const a = [ "\\folder/asd\\asd/", "\\folder\\asdasd\\", "folder/asd/asd", "folder/asd\\asd" ] a.map(s => { s = s.replace(/^\W+|\W+$/g, '') // убираем лишнее с начала и с конца строки const i = s.search(/\W/) // ищем первый разделитель return ~i ? [s.slice(0, i), s.slice(i + 1)] : [s] // если разделитель найден, добавляем в массив первую и вторую часть, если не найден, добавляем всю запись }) Что делать с возвращаемым результатом колбэк-функции Array.map - решать Вам. Принцип, думаю, понятен. С условием, что разделитель состоит из 1 символа. |
Цитата:
введите образец в input . <body> <input id="tx" name=""> <output id="out"> <script> tx.oninput = function() { let match = this.value.match(/([^\x5c\x2F]+)[\x5c\x2F]+(.*?)(?=[\x5c\x2F]*?$)/) if(match) out.textContent = match.splice(1); } </script> |
Часовой пояс GMT +3, время: 19:58. |