如果不在特定的HTML标记内,则匹配Regex

Match Regex if not inside specific HTML tag

本文关键字:Regex HTML 如果不      更新时间:2023-09-26

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

例如,我想匹配{test}而不是<var>{test}</var>

因此,我使用以下正则表达式:(不包括?!)

(?!<var>)'{'S+?'}(?!<'/var>)

所以这对于有空格的文本非常有效,但是如果我有这样的内容(中间没有空格):

<var>{name}</var>{username} 

匹配两个{} -string: {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);