Javascript str.split (/ [^ a-zA-Z0-9. @] | (Username | fname) / не удаляет «username» или «fname» из строки - PullRequest
0 голосов
/ 04 октября 2019

У меня есть простая строка запроса в моей программе:

?username=someone@email.com&fname=

Я нашел регулярное выражение, которое выбирает все, кроме данных, которые я хочу:

[^a-zA-Z0-9.@]|(username|fname)

Я пытаюсь использовать javascripts str.split (), чтобы разделить все, что на самом деле не является данными в запросе, например так:

let userinfo = global.location.search.split(/[^a-zA-Z0-9.@]|(username|fname)/).filter(Boolean);

К сожалению, когдапосле этого я получаю следующий массив:

['username', 'someone@email.com', 'fname'].

Я ожидаю только ['someone@email.com'], поскольку "username" и "fname" должны быть разделены вокруг моего регулярного выражения.

Я проверил это в https://regex101.com/, и, похоже, он работает нормально, поэтому я не уверен, почему он не работает в JS.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Если у вас есть группа захвата в регулярном выражении, используемом с .split(), захваченные строки включаются в результирующий массив.

Если вам нужна группа, но вы не хотите включать ее в результат,используйте группу без захвата (?:username|fname).

Но в этом случае группа вообще не нужна. /xxx|(yyy|zzz)/ соответствует тому же, что и /xxx|yyy|zzz/, они отличаются только тем, что они захватывают.

/[^a-zA-Z0-9.@]|username|fname/
0 голосов
/ 04 октября 2019

Вам необходимо Regex для таких задач, вы можете использовать стандартные URLSearchParams API

let searchParams = "?username=someone@email.com&fname="

let parsed = new URLSearchParams(searchParams)

console.log(parsed.get('username'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...