#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я пытаюсь получить серийный номер из пакета zigbee (т.е. Получить из 702442500 *13*32*702442500#9).
До сих пор я пробовал это:
test = "*#*0##*13*32*702442500#9##";
test.match("*#*0##*13*32*(.*)#9##");
И это:
test.match(«*#*0##*13*32*(.*)#9##»);
Не повезло. Как мне получить действительное регулярное выражение, которое выполняет то, что я хочу?
Комментарии:
1. Вы передаете строку. Регулярное выражение разделяется
/.../
символом . developer.mozilla.org/en-US/docs/Web/JavaScript/Guide /…2.
"*#*0##*13*32*702442500#9##".match(/d/g).join("")
3. @FelixKling:
.match()
метод преобразует его в регулярное выражение. Multitut: вам нужно дважды экранировать*
, поскольку aв строковом литерале также запускает escape-последовательность. Выполнение
\*
даст вам буквенную*
последовательность, которая будет правильно преобразована в нужное вам регулярное выражение.test.match("\*#\*0##\*13\*32\*(.*)#9##");
4. @cookiemonster: Конечно, но это не делает строку регулярным выражением. Если оно передается как регулярное выражение,
*
будет работать так, как ожидалось.5. @cookiemonster, это то, о чем я спрашивал. Большое спасибо.
Ответ №1:
Приведенное ниже регулярное выражение соответствует числу, состоящему по крайней мере из трех цифр,
/([0-9][0-9][0-9] )/
Комментарии:
1. Это очень элегантное решение. Спасибо!
2. @Multitut Вы также можете использовать
/(d{3,})/
, если хотите использовать самый короткий оператор.
Ответ №2:
Если вы хотите извлечь большое число, вы можете использовать:
/*#*0##*13*32*([^#] )#9##/
Обратите внимание, что я использую разделители /
, которые необходимы для написания шаблона в Javascript (без синтаксиса объекта regexp). Когда вы используете этот синтаксис (double)? кавычки не нужны. Я использую [^#]
вместо .*
, потому что это более понятно и более эффективно для механизма регулярных выражений.
Ответ №3:
Самый простой способ захватить эту часть строки — использовать
var regex = /(*d{3,}#)/g,
test = "*13*32*702442500#9";
var match = test.match(regex).slice(1,-1);
Это захватывает a *
, за которым следуют 3 или более d
(числа), пока оно не достигнет octothorpe. Использование модификатора global ( /g
) приведет к тому, что он вернет массив совпадений.
Например, если
var test = "*13*32*702442500#9
*#*0##*13*32*702442500#9##";
затем test.match(regex)
вернется ["*702442500#", "*702442500#"]
. Затем вы можете нарезать элементы этого массива:
var results = [],
test = "... above ... ",
regex = /(*d{3,}#)/g,
matches = test.match(regex);
matches.forEach(function (d) {
results.push(d.slice(1,-1));
})
// results : `["702442500", "702442500"]`