Использование регулярных выражений для извлечения строки в JavaScript

1

Я получаю строки от внешнего клиента, и я пытаюсь выполнить regex-ing, чтобы извлечь определенный номер и статус, встроенные в эту строку. Вот примеры строк, которые входят.

data = "< REP 1 INPUT_AUDIO_A ON >"
data = "< REP 1 INPUT_AUDIO_A OFF " 
data = "< REP 2 INPUT_AUDIO_A ON >" 
data = "< REP 2 INPUT_AUDIO_A OFF >"

и так далее

Я пытаюсь извлечь 1, 2 качестве номера ворот и on или off как статус в двух разных переменных. Я смог извлечь числа с регулярным выражением следующим образом.

var gateNumberRegex = /[0-8]/g;
var gateNumber = data.charAt(data.search(gateNumberRegex)); //extract the gate number from string, output is 1 or 2 etc.

Не знаете, как извлечь статус on/off, любые указатели?

  • 2
    Всегда ли там будет INPUT_AUDIO_A?
  • 0
    @GermanC Да, он всегда будет там, а если нет, то эта строка не подходит для выполнения регулярных выражений, поэтому я бы проигнорировал ее
Показать ещё 4 комментария
Теги:
string

5 ответов

1
Лучший ответ

Прямо вперед

(\d+)\s+INPUT_AUDIO_A\s+(ON|OFF)

См. Демонстрацию на regex101.com.


Сломанный, это говорит:
(\d+)         # capture 1+ digits into group 1
\s+           # match 1+ whitespaces
INPUT_AUDIO_A # INPUT_AUDIO_A literally
\s+           # 1+ whitespaces
(ON|OFF)      # ON or OFF

Используйте группы $1 и $2 соответственно, как в этом фрагменте:

var data = 'data = "< REP 1 INPUT_AUDIO_A ON >" or'
var match = data.match(/(\d+)\s+INPUT_AUDIO_A\s+(ON|OFF)/)
console.log(match[1])
console.log(match[2])
  • 0
    Очень круто! Нужно выучить регулярные выражения. Любые ресурсы, чтобы рекомендовать?
  • 0
    @Cipher: рад помочь. Да, начните с regexone.com
1

Сам по себе, ON/OFF может быть найден с использованием /\b(ON|OFF)\b/ но если в этих строках может быть ВКЛ/ВЫКЛ в другом месте, вы можете перейти более контекстуально с /INPUT_AUDIO_A[\s]+(ON|OFF)/. Как только вы примените регулярное выражение так

var match = '/\b(ON|OFF)\b/'.exec(yourLine)

вы можете извлечь бит включения/выключения с помощью

var enabled = match ? match[1] : yourDefaultValue;
0

Вы могли бы сделать что-то вроде этого:

var onOrOffRegex = /INPUT_AUDIO_A ([^\s]+)/g
var onOrOff = data.match(onOrOffRegex)[1]

Затем вы можете использовать переменную onOrOff чтобы получить статус строки данных.

0

Самый простой способ сделать это:

var data = "< REP 1 INPUT_AUDIO_A ON >"

var result = data.match(/\b(\d+|ON|OFF)\b/g)

Это выведет массив, содержащий число и статус: ["1", "ON"]

0

Для вашего особого случая, считая ввод "действительным", это наиболее прямолинейное решение:

\d+|ON|OFF

Выход: '1','ON','1','OFF','2','ON','2','OFF'

И тогда вы можете разделить его на "пары":

var string = document.getElementById("input").innerHTML;
var array = string.match(/\d+|ON|OFF/g);
var result = [];
var print = "";
for (i = 0; i < array.length; i += 2) {
  result += [array[i], array[i + 1]];
  print += "[" + array[i] + ", " + array[i + 1] + "]<BR>"
}

document.getElementById("input").innerHTML = print;
<div id="input">
  data = "
    < REP 1 INPUT_AUDIO_A ON>" or data = "
    < REP 1 INPUT_AUDIO_A OFF>" or data = "
    < REP 2 INPUT_AUDIO_A ON>" or data = "
    < REP 2 INPUT_AUDIO_A OFF>"
</div>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню