【问题标题】:Match Regex if not inside specific HTML tag如果不在特定 HTML 标记内,则匹配正则表达式
【发布时间】:2015-08-19 07:56:32
【问题描述】:

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

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

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

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

所以这对于带有空格的文本非常有效,但是如果我有类似的东西(中间没有空格):

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

它匹配两个{}-strings:{name}&lt;/var&gt;{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 的“最佳”解决方案吗?

【问题讨论】:

  • 我觉得这个更好:Match text not inside span tags.
  • 是的,这个比重复的问题更好!该答案的一个问题:您知道我如何使用匹配值,因为位置取决于找到它的位置,或者:rubular.com/r/RKVJSGIsvQrubular.com/r/qK5wYnlJCR
  • 需要检查抓包是否为!== undefined并添加相应的逻辑。
  • 谢谢你的回答,我更新了我的问题,因为在javascript中我也得到了结果中带有HTML标签的匹配项。
  • 当“RegEx 匹配除 XHTML 自包含标签之外的开放标签”是您的第一个相关问题时,您应该担心:stackoverflow.com/questions/1732348/…

标签: javascript html regex


【解决方案1】:

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

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

【讨论】:

  • 谢谢 :) 我稍微修剪了一下:while ((m = regex.exec(s))) { if (m[1]) { log.push(m[1]); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2023-03-24
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2015-10-28
相关资源
最近更新 更多