Я пытаюсь написать регулярное выражение, которое будет анализировать хеш-часть URL-адреса, удаляя любой хэшбанг в традиционном формате, который может присутствовать.

Например, я хочу удалить любое из следующего:

#
#/
#!
#!/

Вот что у меня сейчас есть:

/[(?:#|#\/|#!|#!\/)]+/

Однако это захват пустой группы в начале и разделение оставшихся строк. Например,

"#!/E/F".split(/[(?:#|#\/|#!|#!\/)]/);    //  ["", "", "", "E", "F"]

В то время как желаемый результат - это просто одна группа

["E/F"]

Может ли кто-нибудь указать на ошибку в моем регулярном выражении?

[ Если это имеет значение, я создал вышеуказанный вывод с помощью консоли JavaScript в Firebug. ]

0
awj 30 Ноя 2014 в 11:32
1
Ваша группа захвата вызывает малоизвестное поведение split, когда она включает в вывод элементы разделения.
 – 
user663031
30 Ноя 2014 в 11:37

3 ответа

Лучший ответ

Используйте string.replace вместо string.split.

#!?\/?

Используйте указанное выше регулярное выражение, а затем замените совпадение пустой строкой.

> '#!/E/F'.replace(/#!?\/?/g, '');
'E/F'

ДЕМО

3
Avinash Raj 30 Ноя 2014 в 11:46

Ваше регулярное выражение кажется ужасно сложным. Возможно, это то, что вы ищете: "#! / E / F" .split (/ (#! / | # / | #! | #) /);

Вы проверяли документацию по регулярным выражениям Javascript?

Это может отличаться от того, что вы себе представляли, поскольку я не понимаю, почему вы используете: и? в вашем регулярном выражении.

1
KeyboardDrummer 30 Ноя 2014 в 12:22
Извините, : и ? там не было - я скопировал и вставил из незавершенной работы. Их не было в примере со строкой действий. С тех пор я отредактировал вопрос.
 – 
awj
30 Ноя 2014 в 11:58

Если вы используете Javascript, вы можете просто использовать:

location.assign(location.href.replace(/#.*$/, ""));

Однако, если вы хотите удалить только перечисленные выше хэштеги, используйте:

var repl = location.href.replace(/#(!\/?|\/)?$/, '');
0
anubhava 30 Ноя 2014 в 11:36