繁体   English   中英

使用正则表达式提取JavaScript中的字符串

[英]Using regex to extract string in javascript

我正在从外部客户端接收字符串,并且尝试执行正则表达式以提取嵌入在此字符串中的特定数字和状态。 这是输入字符串的示例。

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 >"

等等

我试图提取12为门数和onoff ,如两个不同的变量的状态。 我能够使用正则表达式提取数字,如下所示。

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状态,是否有任何指针?

就其本身而言,可以使用/\\b(ON|OFF)\\b/找到ON / OFF,但是如果这些字符串中的其他位置可能存在ON / OFF,则可以使用/INPUT_AUDIO_A[\\s]+(ON|OFF)/ 一旦你像这样应用正则表达式

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

您可以使用以下命令提取开/关位

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

直截了当

(\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]) 

您可以执行以下操作:

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

然后,您可以使用onOrOff变量获取数据的字符串状态。

对于您的特定情况,假设输入为“有效”,这是最简单的解决方案:

\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> 

最简单的方法是:

var data = "< REP 1 INPUT_AUDIO_A ON >"

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

这将输出一个包含数字和状态的数组: ["1", "ON"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM