Я получаю строки от внешнего клиента, и я пытаюсь выполнить 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
, любые указатели?
Прямо вперед
(\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])
Сам по себе, 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;
Вы могли бы сделать что-то вроде этого:
var onOrOffRegex = /INPUT_AUDIO_A ([^\s]+)/g
var onOrOff = data.match(onOrOffRegex)[1]
Затем вы можете использовать переменную onOrOff
чтобы получить статус строки данных.
Самый простой способ сделать это:
var data = "< REP 1 INPUT_AUDIO_A ON >"
var result = data.match(/\b(\d+|ON|OFF)\b/g)
Это выведет массив, содержащий число и статус: ["1", "ON"]
Для вашего особого случая, считая ввод "действительным", это наиболее прямолинейное решение:
\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>