簡體   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