Как достать "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, время: 02:35. |