我想从HTML中获取不在特定HTML标记内的特殊格式化字符串({string}
)。
例如,我想匹配{test}
而不是<var>{test}</var>
。
因此我使用以下正则表达式:(不包括使用?!
)
(?!<var>)\{\S+?\}(?!<\/var>)
所以这对于带空格的文本非常有效,但如果我有类似的东西(中间没有空格):
<var>{name}</var>{username}
匹配两个{}
- 字符串:{name}</var>{username}
我如何才能在这里匹配{username}
?
更新 如果我需要做这样的事情
<var.*?<\/var>|(\{\S+?\})
如何获取匹配的值,因为匹配的索引取决于位置。
示例:
匹配1:
"{username}<var>{name}</var>".match(/<var.*?<\/var>|(\{\S+?\})/g);
=> ["{username}", "<var>{name}</var>"]
比赛2:
"<var>{name}</var>{username}".match(/<var.*?<\/var>|(\{\S+?\})/g);
=> ["<var>{name}</var>", "{username}"]
当前解决方案:
angular.forEach(html.match(regex), function (match) {
if(match.substring(0, 4) !== '<var') {
newAdded = match;
}
});
这真的是最好的&#39; JavaScript的解决方案?
答案 0 :(得分:2)
以下是使用以下正则表达式实现此目的的方法:
/<var.*?<\/var>|(\{\S+?\})/g;
var s = '<var>{name}</var>{username}<var>{newname}</var>{another_username}';
var log = [];
var m;
var regex = /<var.*?<\/var>|(\{\S+?\})/g;
while ((m = regex.exec(s)) !== null) {
if ( m[1] !== undefined) {
log.push(m[1]);
}
}
alert(log);
&#13;