Экранирующие звезды JavaScript для регулярного выражения

#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"]`