似乎无法为特定情况生成正则表达式
Cant seem to make a regex for a specific case
我使用节点,需要将UNIX类型的grep命令应用于HTTP GET后得到的主体响应。这是传入的文本(正文变量):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <om2m:discovery xmlns:om2m="http://uri.etsi.org/m2m" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
<om2m:matchSize>65</om2m:matchSize>
<om2m:discoveryURI>
<reference>gscl</reference>
<reference>gscl/scls</reference>
<reference>gscl/scls/subscriptions</reference>
<reference>gscl/scls/mgmtObjs</reference>
<reference>gscl/scls/mgmtObjs/subscriptions</reference>
<reference>gscl/applications</reference>
<reference>gscl/applications/subscriptions</reference>
<reference>gscl/applications/mgmtObjs</reference>
<reference>gscl/applications/mgmtObjs/subscriptions</reference>
<reference>gscl/accessRights</reference>
<reference>gscl/accessRights/subscriptions</reference>
<reference>gscl/groups</reference>
<reference>gscl/groups/subscriptions</reference>
<reference>gscl/containers</reference>
<reference>gscl/containers/subscriptions</reference>
<reference>gscl/subscriptions</reference>
<reference>gscl/accessRights/AR_ADMIN</reference>
<reference>gscl/accessRights/AR_ADMIN/subscriptions</reference>
<reference>gscl/scls/nscl</reference>
<reference>gscl/scls/nscl/applications</reference>
<reference>gscl/scls/nscl/applications/subscriptions</reference>
<reference>gscl/scls/nscl/applications/mgmtObjs</reference>
<reference>gscl/scls/nscl/applications/mgmtObjs/subscriptions</reference>
<reference>gscl/scls/nscl/accessRights</reference>
<reference>gscl/scls/nscl/accessRights/subscriptions</reference>
<reference>gscl/scls/nscl/groups</reference>
<reference>gscl/scls/nscl/groups/subscriptions</reference>
<reference>gscl/scls/nscl/containers</reference>
<reference>gscl/scls/nscl/containers/subscriptions</reference>
<reference>gscl/scls/nscl/subscriptions</reference>
<reference>gscl/scls/nscl/attachedDevices</reference>
<reference>gscl/scls/nscl/attachedDevices/subscriptions</reference>
<reference>gscl/scls/nscl/notificationChannels</reference>
<reference>gscl/scls/nscl/mgmtObjs</reference>
<reference>gscl/scls/nscl/mgmtObjs/subscriptions</reference>
<reference>gscl/scls/nscl/m2mPocs</reference>
<reference>gscl/applications/98191axla</reference>
<reference>gscl/applications/98191axla/subscriptions</reference>
<reference>gscl/applications/98191axla/containers</reference>
<reference>gscl/applications/98191axla/containers/subscriptions</reference>
<reference>gscl/applications/98191axla/accessRights</reference>
<reference>gscl/applications/98191axla/accessRights/subscriptions</reference>
<reference>gscl/applications/98191axla/groups</reference>
<reference>gscl/applications/98191axla/groups/subscriptions</reference>
<reference>gscl/applications/98191axla/notificationChannels</reference>
<reference>gscl/applications/98191axla/containers/SENSOR </reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/CI_23326802</reference>
<reference>gscl/applications/98191axla/containers/DATA</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/CI_566628946</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/CI_285448423</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/CI_395775165</reference>
</om2m:discoveryURI> </om2m:discovery>
从该文本中,我需要提取应用程序和容器之间的ID,在本例中,该ID等于98191axla。我尝试过使用匹配方法:
var searchFor="'s<reference>gscl'/applications'.'d'/DATA'/contentInstances'/subscriptions<'/reference>";
console.log("Looking for:"); console.log(searchFor);
var found = body.match(searchFor);
它总是返回-1。我以前从未使用过regex,所以我不得不尝试不同的东西。。。它们都没有起作用。非常感谢您的帮助!
谢谢!(顺便说一句,我知道这是一个xml表示,但它不是一个复杂的表示,有非常不同的子项,所以我认为操作文本会更容易…)
您可以使用以下代码:
var re = /<reference>gscl'/applications'/('w+)'/containers'/DATA'/congtentInstances'/subscriptions<'/reference>/;
var m = str.match(re);
if (m) console.log(m[1]);
请注意,regexp对象是在斜杠之间声明的(不将模式括在引号之间)。
该模式使用包含ascii数字和字母(以及下划线)的'w
字符类。这个类后面跟着量词+
,意思是一个或多个。最后,为了隔离所需的子字符串,使用了一个捕获组。
我不是Regex专家,但以下内容似乎适用于此数据集。
//Your data simulated.
var data = document.getElementById('data').innerHTML;
var myRegexp = /'/applications'/([0-9a-zA-Z]*)'/containers/g;
//Group iteration from: http://stackoverflow.com/a/432503/402706
var match = myRegexp.exec(data);
while (match != null) {
//write out each id that was found
console.log(match[1]);
// matched text: match[0]
// match start: match.index
// capturing group n: match[n]
match = myRegexp.exec(data);
}
<script type='text' id='data'>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <om2m:discovery xmlns:om2m="http://uri.etsi.org/m2m" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
<om2m:matchSize>65</om2m:matchSize>
<om2m:discoveryURI>
<reference>gscl</reference>
<reference>gscl/scls</reference>
<reference>gscl/scls/subscriptions</reference>
<reference>gscl/scls/mgmtObjs</reference>
<reference>gscl/scls/mgmtObjs/subscriptions</reference>
<reference>gscl/applications</reference>
<reference>gscl/applications/subscriptions</reference>
<reference>gscl/applications/mgmtObjs</reference>
<reference>gscl/applications/mgmtObjs/subscriptions</reference>
<reference>gscl/accessRights</reference>
<reference>gscl/accessRights/subscriptions</reference>
<reference>gscl/groups</reference>
<reference>gscl/groups/subscriptions</reference>
<reference>gscl/containers</reference>
<reference>gscl/containers/subscriptions</reference>
<reference>gscl/subscriptions</reference>
<reference>gscl/accessRights/AR_ADMIN</reference>
<reference>gscl/accessRights/AR_ADMIN/subscriptions</reference>
<reference>gscl/scls/nscl</reference>
<reference>gscl/scls/nscl/applications</reference>
<reference>gscl/scls/nscl/applications/subscriptions</reference>
<reference>gscl/scls/nscl/applications/mgmtObjs</reference>
<reference>gscl/scls/nscl/applications/mgmtObjs/subscriptions</reference>
<reference>gscl/scls/nscl/accessRights</reference>
<reference>gscl/scls/nscl/accessRights/subscriptions</reference>
<reference>gscl/scls/nscl/groups</reference>
<reference>gscl/scls/nscl/groups/subscriptions</reference>
<reference>gscl/scls/nscl/containers</reference>
<reference>gscl/scls/nscl/containers/subscriptions</reference>
<reference>gscl/scls/nscl/subscriptions</reference>
<reference>gscl/scls/nscl/attachedDevices</reference>
<reference>gscl/scls/nscl/attachedDevices/subscriptions</reference>
<reference>gscl/scls/nscl/notificationChannels</reference>
<reference>gscl/scls/nscl/mgmtObjs</reference>
<reference>gscl/scls/nscl/mgmtObjs/subscriptions</reference>
<reference>gscl/scls/nscl/m2mPocs</reference>
<reference>gscl/applications/98191axla</reference>
<reference>gscl/applications/98191axla/subscriptions</reference>
<reference>gscl/applications/98191axla/containers</reference>
<reference>gscl/applications/98191axla/containers/subscriptions</reference>
<reference>gscl/applications/98191axla/accessRights</reference>
<reference>gscl/applications/98191axla/accessRights/subscriptions</reference>
<reference>gscl/applications/98191axla/groups</reference>
<reference>gscl/applications/98191axla/groups/subscriptions</reference>
<reference>gscl/applications/98191axla/notificationChannels</reference>
<reference>gscl/applications/98191axla/containers/SENSOR </reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/CI_23326802</reference>
<reference>gscl/applications/98191axla/containers/DATA</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/CI_566628946</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/CONT_81747241/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/SENSOR/contentInstances/CI_285448423</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/contentInstances</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/contentInstances/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/CONT_360523761/subscriptions</reference>
<reference>gscl/applications/98191axla/containers/DATA/contentInstances/CI_395775165</reference>
</om2m:discoveryURI> </om2m:discovery>
</script>
你可以这样做:
var data = '<reference>gscl/applications/98191axla/containers/CONT_81747241</reference>';
console.log(data.match(/'/applications'/([^]+)(?='/containers)/i)[1]);
基本上,括号将捕获/applications/
和/containers
相关文章:
- 为什么浏览器为电子邮件验证正则表达式显示不同的反斜杠.如何防止这种情况发生
- 带有 OR 语句的正则表达式来检查类似情况
- 以下情况的有效正则表达式是什么
- 用于 HTML 表单验证的正则表达式在没有空格的情况下开始
- 如何在不使用正则表达式的情况下从 JavaScript 中的字符串中删除 HTML 标记
- 如何在不使用 JavaScript 正则表达式的情况下将大写转换为小写,反之亦然
- 在这种情况下,正则表达式中的“[”是什么( 2 个问题)
- 所有情况下@import CSS 标记的正则表达式
- 如何在没有正则表达式的情况下将 dd-MM-yyyy HH:mm:ss 转换为 Javascript 中的纪元时间
- 有人能解释为什么JS正则表达式在这种情况下失败吗
- 如何在没有查询部分的情况下获取JavaScript正则表达式
- 正则表达式,以包括所有特定模式并仅排除一种情况
- 似乎无法为特定情况生成正则表达式
- 为什么JavaScript正则表达式在我没有告诉它的情况下捕捉空白
- 在这种情况下如何使用正则表达式
- 如何在不使用正则表达式的情况下使用javascript在数组中搜索字符串
- 在没有正则表达式的情况下替换所有内容,我可以在哪里使用 G
- 如何在不使用特殊字符和正则表达式的情况下发布数据
- 在前面的文章中没有提到的情况下,在Javascript中对正则表达式求反
- 为什么这个正则表达式可以在有或没有转义的连字符/破折号的情况下工作?