我有一个正则表达式:/(?<!\<)\<[a-zA-Z0-9. _]+\>/g。如果可以的话,可以在浏览器控制台中正常工作"(<<a1>> * <b1> * <c1> * <d1>) * <<e1>>".match(/(?<!\<)\<[a-zA-Z0-9. _]+\>/g)。
/(?<!\<)\<[a-zA-Z0-9. _]+\>/g
"(<<a1>> * <b1> * <c1> * <d1>) * <<e1>>".match(/(?<!\<)\<[a-zA-Z0-9. _]+\>/g)
SyntaxError: Invalid regular expression: /(?<!<)<([a-zA-Z0-9. _]+)>/: Invalid group在Node.js中执行时会抛出同一行代码。
SyntaxError: Invalid regular expression: /(?<!<)<([a-zA-Z0-9. _]+)>/: Invalid group
我想匹配字符串中包含的所有变量,如果用和括起来<,则>忽略它们。<<``>>
<
>
<<``>>
您可以使用此正则表达式(可能需要稍作更改,具体取决于您是要检测行的开始/结束还是这些类型的工具)。我在内的值周围添加了一个补偿组,<>因为此正则表达式还将匹配之前<和之后的char >。
<>
如果您<>可以放置在字符串的开头/结尾:
/(?:[^<]|^)\<([a-zA-Z0-9. _]+)\>(?:[^<]|$)/g
如果您不需要:
/(?:[^<])\<([a-zA-Z0-9. _]+)\>(?:[^<])/g
注意:不能确定是否与否定,但可能比负面观察快。
编辑:从您的评论,我不确定您知道捕获组。它允许您提取正则表达式的部分,而不必提取整个匹配的表达式。
要在Javascript中使用它们,请参见以下示例(请注意,您必须删除/regex的开头和结尾,并对\regex对象也进行转义):
/
\
var myRegex = new RegExp('(?:[^<]|^)\\<([a-zA-Z0-9. _]+)\\>(?:[^<]|$)', 'g'), testStr = '(<<a1>> * <b1> * <c1> * <d1>) * <<e1>>', match, elem = document.getElementById('result'); while (match = myRegex.exec(testStr)) { elem.innerHTML = elem.innerHTML + match[1] + '<br>'; } <div id="result"></div>