一尘不染

正则表达式适用于浏览器,但不适用于Node.js

node.js

我有一个正则表达式:/(?<!\<)\<[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中执行时会抛出同一行代码。

我想匹配字符串中包含的所有变量,如果用和括起来<,则>忽略它们。<<``>>


阅读 255

收藏
2020-07-07

共1个答案

一尘不染

您可以使用此正则表达式(可能需要稍作更改,具体取决于您是要检测行的开始/结束还是这些类型的工具)。我在内的值周围添加了一个补偿组,<>因为此正则表达式还将匹配之前<和之后的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>
2020-07-07