Простой вопрос о регулярных выражениях

1

Я хочу удалить это из строки url http://.....?page=1 Я знаю, что это не работает, но мне было интересно, как вы это сделаете правильно.

document.URL.replace("?page=[0-9]", "")

Спасибо

  • 1
    Удалить что? Ваш вопрос плохо сформулирован.
  • 0
    Вы хотите удалить его, или вы просто хотите использовать что-то еще? и что вы хотите "http: // .....? page = 1" буквально, часть "..."?
Теги:
replace

4 ответа

4
Лучший ответ

Похоже, вы хотите избавиться от протокола и запроса. Так как же просто конкатенировать оставшиеся части?

var loc = window.location;

var str = loc.host + loc.pathname + loc.hash;

http://jsfiddle.net/9Ng3Z/


Я не совсем уверен, что это за требования, но это довольно простое регулярное выражение работает.

loc.replace(/https?\:\/\/([^?]+)(\?|$)/,'$1');

Это может быть наивная реализация, но попробуйте и посмотрите, подходит ли она вам.

http://jsfiddle.net/9Ng3Z/1/

  • 0
    Это самое простое и надежное решение. Хеш, вероятно, не нужен в данном конкретном случае.
  • 0
    Это неплохая идея, но даже если ради любопытства, я бы хотел знать, как будет работать регулярное выражение. Спасибо!
Показать ещё 3 комментария
2

? является специальным символом регулярного выражения. Вам нужно избегать его для буквального ?. Также используйте литералы регулярного выражения.

document.URL.replace(/\?page=[0-9]/, "")
  • 0
    это не работает
  • 0
    У меня просто отлично работает - jsfiddle.net/yBXfK
Показать ещё 3 комментария
1

Ответ от @patrick dw наиболее практичен, но если вам действительно интересно узнать о правильном выражении, то вот что я буду делать:

var trimUrl = function(s) {
  var r=/^http:\/\/(.*?)\?page=\d+.*$/, m=(""+s).match(r);
  return (m) ? m[1] : s;
}
trimUrl('http://foo.com/?page=123'); // => "foo.com/"
trimUrl('http://foo.com:8080/bar/?page=123'); // => "foo.com:8080/bar/"
trimUrl('foobar'); // => "foobar"
  • 0
    офигенно, спасибо!
0

Ты очень близко. Чтобы захватить URL-адрес, используйте location.href и не забудьте оставить вопросительный знак.

var URL = location.href.replace("\?page=[0-9]", "");
location.href = URL; // and redirect if that what you intend to do

Вы также можете удалить все параметры строки запроса:

var URL = location.href.replace("\?.*", "");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню