Javascript 如何使用正则表达式解析此格式(ICAO飞行计划备注)?
我正在尝试构造一个正则表达式,可以用来从如下()所示的字符串中提取信息:Javascript 如何使用正则表达式解析此格式(ICAO飞行计划备注)?,javascript,regex,Javascript,Regex,我正在尝试构造一个正则表达式,可以用来从如下()所示的字符串中提取信息: DEP/S10 DEST/3W5 ALTN/1S2 RMK/测试,请忽略典型/自制 这个长字符串中有一系列单独的“备注”。每个备注都包含一个指示符(例如,DEP,DEST),一个正斜杠分隔符,然后是内容本身 例如,上面的字符串中有5个单独的备注,带有以下指标和内容: ╔═══════════╦════════════════════════╗ ║ Indicator ║ Content ║ ╠
DEP/S10 DEST/3W5 ALTN/1S2 RMK/测试,请忽略典型/自制
这个长字符串中有一系列单独的“备注”。每个备注都包含一个指示符(例如,DEP
,DEST
),一个正斜杠分隔符,然后是内容本身
例如,上面的字符串中有5个单独的备注,带有以下指标和内容:
╔═══════════╦════════════════════════╗
║ Indicator ║ Content ║
╠═══════════╬════════════════════════╣
║ DEP ║ S10 ║
║ DEST ║ 3W5 ║
║ ALTN ║ 1S2 ║
║ RMK ║ TESTING, PLEASE IGNORE ║
║ TYP ║ HOMEBUILT ║
╚═══════════╩════════════════════════╝
我希望能够使用正则表达式解析这些信息,并捕获指示器和内容的组。我不确定这是否可行。特别是,我发现,如果不为下一个备注选择指示符,就很难提取内容部分(即,只匹配第一个备注的S10
,而不是S10 DEST
)
首先,可以使用以下正则表达式仅提取指标,而不提取内容:
(\w+)\//g
内容有点挑战性——它可以包含字母、数字、空格和大多数标点符号(不包括正斜杠)。基本上,它需要捕获任何字符,直到形式为\w+\/
(一个或多个字符后跟正斜杠,表示下一个备注的开始)。我还没弄明白
这在正则表达式中是可能的吗
仅供参考,我希望使用JavaScript的正则表达式引擎来实现这一点。您可以使用正向前瞻断言
(\w+)\/([^\/]+?)(?= \w+\/|$)
然后枚举所有匹配项,对于每个匹配项,组1将是指示符,组2将是内容。您可以使用正向前瞻断言
(\w+)\/([^\/]+?)(?= \w+\/|$)
然后枚举所有匹配项,对于每个匹配项,第1组为指标,第2组为内容。使用
split
和for
循环查找指标和内容。不是最干净的方式,但可能
var info='DEP/S10 DEST/3W5 ALTN/1S2 RMK/测试,请忽略典型/自制';
var div=info.split('/');
var指标=[];
指示器推送(div[0]);
var内容=[];
var-curr;
for(i=1;i使用split
和for
循环查找指标和内容。这不是最干净的方法,但可能是
var info='DEP/S10 DEST/3W5 ALTN/1S2 RMK/测试,请忽略典型/自制';
var div=info.split('/');
var指标=[];
指示器推送(div[0]);
var内容=[];
var-curr;
对于(i=1;i使用Stringsplit()
方法和表达式/?(\w+\/)/
生成以下数组,其中包含每个备注指示符,后跟其内容
var input = "DEP/S10 DEST/3W5 ALTN/1S2 RMK/TESTING, PLEASE IGNORE TYP/HOMEBUILT";
var remarks = input.split(/ ?(\w+)\//);
[“”、“DEP”、“S10”、“DEST”、“3W5”、“ALTN”、“1S2”、“RMK”、“测试,请忽略”、“典型”、“自制”]
如果要删除初始空白值,还可以对结果数组执行shift()
var input = "DEP/S10 DEST/3W5 ALTN/1S2 RMK/TESTING, PLEASE IGNORE TYP/HOMEBUILT";
var remarks = input.split(/ ?(\w+)\//);
remarks.shift();
[“DEP”、“S10”、“DEST”、“3W5”、“ALTN”、“1S2”、“RMK”、“测试,请忽略”、“典型”、“自制”]
来源
使用字符串split()
方法和表达式/?(\w+\/)/
生成以下数组,其中包含每个备注指示符,后跟其内容
var input = "DEP/S10 DEST/3W5 ALTN/1S2 RMK/TESTING, PLEASE IGNORE TYP/HOMEBUILT";
var remarks = input.split(/ ?(\w+)\//);
[“”、“DEP”、“S10”、“DEST”、“3W5”、“ALTN”、“1S2”、“RMK”、“测试,请忽略”、“典型”、“自制”]
如果要删除初始空白值,还可以对结果数组执行shift()
var input = "DEP/S10 DEST/3W5 ALTN/1S2 RMK/TESTING, PLEASE IGNORE TYP/HOMEBUILT";
var remarks = input.split(/ ?(\w+)\//);
remarks.shift();
[“DEP”、“S10”、“DEST”、“3W5”、“ALTN”、“1S2”、“RMK”、“测试,请忽略”、“典型”、“自制”]
来源
为什么不在“/”上使用split()
,那么偶数索引是指示符,奇数是内容您可以尝试\w+/[^/]+?(?=\w+/$)
regex-@depperm,它只会给您[DEP,S10 DEST,3W5 ALTN……]而不是指示符/内容“对”,这是有效的:/(\w+)\/(*)($)($)(?=\w+\/)/g
;剩下的就是在/
上拆分每个项目。为什么不在“/”上使用split()
,那么偶数索引是指示符,奇数是内容您可以尝试\w+/[^/]+(?=\w+/$)
regex-@depperm,它只会给您[DEP,S10 DEST,3W5 ALTN……]而不是指示符/内容的“对”:/(\w+)/(*?)(?:$|)(?=\w+\/)/g
;剩下的就是在/
上拆分每个项目。