繁体   English   中英

如果不在特定的HTML标签内,则匹配正则表达式

[英]Match Regex if not inside specific HTML tag

我想从HTML中获取特殊格式的字符串( {string} ),这些{string}不在特定的HTML标记内。

例如,我想匹配{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;
  }
});

这真的是JavaScript的“最佳”解决方案吗?

这是使用以下正则表达式可实现此目的的方法:

/<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); 

暂无
暂无

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

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