Мой RegEx испортил остальную часть моего JavaScript - PullRequest
1 голос
/ 23 июня 2009

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

Вот мой сценарий:

$(document).ready(function () {
    var show_number;
    var url_param;

    $("a[rel=more]").live("click", function(){
        url_param = $(this).attr("href").match(/show:[^/]+/i);
        show_number = url_param.substr(5);

        alert(show_number);

        return false;
    });
});

Теперь вместо того, чтобы показывать предупреждение так, как оно должно быть, просто следует по ссылке. Однако, если я избавлюсь от переменной «show_number» и настрою ее на предупреждение «url_param», все пойдет хорошо.

Мне нужно получить то, что будет после первых пяти символов этого RegEx. Я попытался добавить функцию substr () напрямую, но это не помогло.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 23 июня 2009

match() возвращает массив, а не строку, поэтому как минимум вам нужно что-то вроде этого:

url_param = $(this).attr("href").match(/show:[^/]+/i);
if (url_param && url_param.length > 0) {
    show_number = url_param[0].substr(5);
    alert(show_number);
}

Более точный способ получить часть URL после «show:» - использовать круглые скобки для захвата этой части URL, которая в итоге будет иметь вид url_param[1]:

url_param = $(this).attr("href").match(/show:([^/]+)/i);
if (url_param && url_param.length > 0) {
    show_number = url_param[1];
    alert(show_number);
}
0 голосов
/ 23 июня 2009

Нет, проблема не с обратной косой чертой. Иаков прав, цитирования не нужно.

Проблема в том, что действительно, match возвращает массив. Следовательно, следующий простой контрольный пример НЕ работает.

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/show:[^/]+/i);
show_number = url_param.substring(5);
alert (show_number);
</script>
</html>

Однако, эта вторая версия работает.

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/show:[^/]+/i);
show_number = url_param[0].substring(5);
alert (show_number);
</script>
</html>

Еще лучше, вероятно, что-то явное, которое обрабатывает пробелы, проверяет начало и конец строки и извлекает сопоставление с шаблоном.

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/^\s*show:\s*([^/]+)\s*$/i);
show_number = url_param[0].substring(5);
alert (show_number);
</script>
</html>

Это немного более пуленепробиваемо.

0 голосов
/ 23 июня 2009

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

/show:[^/]+/i

Должно быть:

/show:[^\/]+/i

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...