【发布时间】:2015-08-19 07:56:32
【问题描述】:
我想从 HTML 中获取不在特定 HTML 标记内的特殊格式字符串 ({string})。
例如,我想匹配 {test} 而不是 <var>{test}</var>。
因此我使用以下正则表达式:(不包括使用?!)
(?!<var>)\{\S+?\}(?!<\/var>)
所以这对于带有空格的文本非常有效,但是如果我有类似的东西(中间没有空格):
<var>{name}</var>{username}
它匹配两个{}-strings:{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 的“最佳”解决方案吗?
【问题讨论】:
-
我觉得这个更好:Match text not inside span tags.
-
是的,这个比重复的问题更好!该答案的一个问题:您知道我如何使用匹配值,因为位置取决于找到它的位置,或者:rubular.com/r/RKVJSGIsvQ 或 rubular.com/r/qK5wYnlJCR
-
需要检查抓包是否为
!== undefined并添加相应的逻辑。 -
谢谢你的回答,我更新了我的问题,因为在javascript中我也得到了结果中带有HTML标签的匹配项。
-
当“RegEx 匹配除 XHTML 自包含标签之外的开放标签”是您的第一个相关问题时,您应该担心:stackoverflow.com/questions/1732348/…
标签: javascript html regex