#javascript #regex #pattern-matching
#javascript #регулярное выражение #сопоставление с шаблоном
Вопрос:
Рассмотрим следующее:
var params = location.search.match(/=([wd-] )amp;?/g);
console.log(params);
Результат является:
["=7amp;", "=31500amp;", "=1"]
Я не вижу там никаких знаков, только цифры или слова, поэтому я установил круглые скобки, но это не работает. Итак, как мне это сделать?
Комментарии:
1. не могли бы вы также предоставить входные данные, которые вы используете?
2. @Russ: Я бы сказал, что это что-то вроде «?foo =7amp;bar = 31500 amp; baz = 1». Это не так сложно вывести .. 😉
Ответ №1:
Получаете ли вы параметр querystring? Я думаю, это то, что вы хотите (хотя оно не использует регулярное выражение).
<script type="text/javascript">
<!--
function querySt(ji) {
hu = window.location.search.substring(1);
gy = hu.split("amp;");
for (i=0;i<gy.length;i ) {
ft = gy[i].split("=");
if (ft[0] == ji) {
return ft[1];
}
}
}
var koko = querySt("koko");
document.write(koko);
document.write("<br>");
document.write(hu);
-->
</script>
Комментарии:
1. 1: Не все, что может быть сделано с помощью regexen, должно быть сделано с помощью regexen.
2. @Residuum: В данном случае это достаточно легко сделать с помощью регулярного выражения.
Ответ №2:
Есть хорошая функция javascript под названием gup(), которая упрощает подобные вещи. Вот функция:
function gup( name )
{
name = name.replace(/[[]/,"\[").replace(/[]]/,"\]");
var regexS = "[\?amp;]" name "=([^amp;#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
и пример использования:
var myVar = gup('myVar');
Итак, если ваша строка запроса выглядит следующим образом: ?myVar=asdf
myVar вернет ‘asdf’.
Ответ №3:
.match
Метод возвращает всю сопоставленную строку, а не какие-либо группировки, которые вы определили с помощью круглых скобок.
Если вы хотите вернуть просто группировку в регулярном выражении, вам придется использовать .exec
метод несколько раз и извлечь соответствующую группу из результирующего массива:
var search = location.search,
param = /=([wd-] )amp;?/g,
params = [],
match;
while ((match = param.exec(search)) != null) {
params.push(match[1]);
}
console.log(params);
Это работает, потому что g
флаг используется в регулярном выражении. Каждый раз, когда вы вызываете .exec
для param
регулярного выражения, его lastIndex
атрибут устанавливается на следующую соответствующую подстроку, что, в свою очередь, гарантирует, что следующий вызов .exec
начнет поиск со следующего совпадения. Результирующий массив содержит всю сопоставленную строку с индексом 0, затем каждую сопоставленную группу в последующих позициях. Таким образом, ваша группа возвращается как индекс 1 массива.