我正在编写一个函数来查找给定字符串和给定属性名称的属性值。
输入效果如下所示:
sip:+19999999999@trunkgroup2:5060;user=phone
<sip:+19999999999;tgrp=0180401;trunk-context=aaaa.aaaa.ca@10.10.10.100:8000;user=phone;transport=udp>
<sip:19999999999;tgrp=0306001;trunk-context=aaaa.aaaa.ca@10.10.10.100:8000;transport=udp>
<sip:+19999999999;tgrp=SMPPDIN;trunk-context=aaaa.aaaa.ca@10.10.10.100:8000;transport=udp>
几个小时后,我出现了这个正则表达式:/(\Wsip[:,+,=]+)(\w+)/g
,但这不适用于第一个例子 - 因为在属性名称之前没有单词字符。
如何解析这两个案例 - <sip...
和sip..
只有当它是字符串的开头时,才能修复此表达式。
我使用此函数提取sip
和tgrp
值。
答案 0 :(得分:4)
将 success: function OnSuccess(response) {
var str = response.d;
var data = JSON.parse(str);
var jsonObj = $.map(data, function(value, index) {
return [value];
});
console.log(jsonObj );
}
替换为\W
,然后使用
\b
或者,在字符串的开头匹配:
\b(sip[:+=]+)(\w+)
请参阅first regex demo和second regex demo。
由于^\W?(sip[:+=]+)(\w+)
是一个与任何非单词字符匹配的消费模式(字母/数字/ \W
以外的字符),因此您不会在字符串的开头匹配。 _
字边界将在字符串的开头匹配,以防\b
之前有非字char。
如果您字面需要在可选的非单词字符后面的字符串开头找到匹配项,则s
必须替换为\W
其中{{} 1}}匹配字符串的开头,^\W?
匹配1或0个非字符字符。
另请注意,字符类中的^
匹配为文字\W?
。如果你想用它来枚举字符,你应该删除它。
模式详情:
,
- 一个单词边界
,
- 字符串开头 \b
- 1或0(由于^
量词)非单词字符(即字母/数字以外的字符和\W?
)
?
- 第1组:_
子字符串后跟一个或多个(sip[:+=]+)
,sip
或:
字符
+
- 第2组:一个或多个单词字符。答案 1 :(得分:1)
开始使用行^
并使<
可选使用?
^<?(sip[:,+,=]+)(\w+)