2015-07-09 9 views
0

Я пытаюсь извлечь определенную часть URL-адреса с использованием регулярного выражения (JavaScript) и иметь проблемы с исключением символов после определенного фрагмента. Вот то, что я до сих пор:Извлечь символы в URL после определенного символа до определенного символа

URL: http://www.somesite.com/state-de

Использование url.match(/\/[^\/]+$/)[0] я могу извлечь состояние-де, как я хочу.

Однако, когда URL-адрес становится http://www.somesite.com/state-de?page=r, и я делаю то же самое регулярное выражение, он тянет все, включая «? Page = r», которого я не хочу. Я хочу, чтобы извлечь только государства-де независимо от того, Что после того, как он (выглядит как обычно следует за ним «?»)

+0

'\/(? [^ \ /] +) \ * $' https://regex101.com/r/oB2dC4/1 – 1252748

+0

Извините, что не всегда «/ state-de», который я хочу извлечь, иногда его другую информацию, но я всегда хочу отрезать часть «? Page = a», которая может или не может следовать. – MarkII

+0

, так что вы хотите, чтобы текст после последней косой черты вопросительного знака. В этих вопросах полезно использовать пару ожидаемых входов и выходов. Измените свой вопрос, чтобы передать эту информацию. Не совсем понятно, что вы хотите. У вас есть пять ответов, и вы предоставили минимальную информацию. – 1252748

ответ

1

Я бы рекомендовал читать на обычных выражениях вообще. Что вы хотите сделать здесь, чтобы заставить регулярное выражение останавливаться, когда оно попадает? в URL.

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

Пример:

url.match(/(\/[^\/?]+)(?:\?.*)?$/)[1] 
+0

Это сработало, спасибо! – MarkII

+0

Ненужное использование групп захвата. –

+0

@MarkII причина, по которой я разместил средство регулярного выражения, основанное на lookahead, ваше регулярное выражение не вернет 'state-de' оно возвращает'/state-de' –

2

Это может работать:

var arr = url.split("/") 
arr[arr.length - 1].split("?")[0] 
+0

запрет на отсутствие/в остальном URL-адресе ... –

+0

, что было бы хорошей альтернативой – MarkII

0

Если вы хотите сделать это с помощью регулярных выражений попробовать это :

url.match(/https?:\/\/([a-z0-9-]+\.)+[a-z]+\/([a-z0-9_-])\/?(\?.*)?/)[1]

Или вы могли бы сделать это с помощью JQuery:

var url = 'http://www.somesite.com/state-de?page=r#mark4'; 

// Create a special anchor element, set the URL to it 

var a = $('<a>', { href:url })[1]; 

console.log(a.hostname); 
console.log(a.pathname); 
console.log(a.search); 
console.log(a.hash); 
+0

не уверен, что ваш пытается совместить, в моем тестовом прогоне он извлекает «somesite», что не то, что мне нужно – MarkII

+0

Извините, есть другой индекс нужного вам совпадения - '[1]'. Вторая пара скобок. –

0

избежать чрезмерно сложных RegExs, когда это возможно, так что я, как правило, сделать это в несколько этапов (с .replace()):

var stripped = url.replace(/[?#].*/, ''); // Strips anything after ? or # 

Теперь вы можете сделать проще преобразовать в получить состояние, например:?.

var state = stripped.split('/').pop() 
Смежные вопросы