Я получаю другое поведение от регулярного выражения в 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, если это вообще полезно.
При использовании строк \ d
является специальным символом. Необходимо избегать обратной косой черты:
var regex2 = new RegExp('\\d');
См. Строковые литералы :
Экранные символы
Для символов, не указанных в таблице 2.1 предыдущая обратная косая черта игнорируется, но это использование не рекомендуется и необходимо избегать.
Таким образом, в основном « \ d
» обрабатывается как «d»
, поэтому он не совпадает. Например:
alert('d'.search(new RegExp('\d'))); // 0 (matches!)