Странное поведение регулярного выражения JavaScript

Я получаю другое поведение от регулярного выражения в JavaScript в зависимости от того, объявляю ли я это с помощью литерального синтаксиса. Используя чрезвычайно простой тест файл HTML:

<html>
    <head>
        <script type="text/javascript">
            var s = '3';
            var regex1 = /\d/;
            var regex2 = new RegExp('\d');

            alert(s.search(regex1)); //  0 (matches)
            alert(s.search(regex2)); // -1 (does not match)
        </script>
    </head>
    <body></body>
</html>

Регулярное выражение объявляется с литеральным синтаксисом (/\d/) работы правильно, в то время как другой (new RegExp('\d')) не делает. С какой стати это происходит?

Я использую Google Chrome 5.0.375.70 на Windows Vista Home Premium, если это вообще полезно.

1
задан Kiwi 14 June 2010 в 04:12
поделиться

2 ответа

При использовании строк \ d является специальным символом. Необходимо избегать обратной косой черты:

var regex2 = new RegExp('\\d');

См. Строковые литералы :

Экранные символы

Для символов, не указанных в таблице 2.1 предыдущая обратная косая черта игнорируется, но это использование не рекомендуется и необходимо избегать.

Таким образом, в основном « \ d » обрабатывается как «d» , поэтому он не совпадает. Например:

alert('d'.search(new RegExp('\d'))); // 0 (matches!)
2
ответ дан 2 September 2019 в 23:47
поделиться
var regex2 = new RegExp('\\d');

у меня работает.

0
ответ дан 2 September 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: