我有以下两行代表我处理的数据类型的示例,我目前正在regex101.com和Google Chrome控制台中测试。完成后我希望在Javascript应用程序中使用正则表达式。逻辑基本上与正则表达式匹配,除非它以' Note'为前缀,其中基本正则表达式是/([0-9]。[0-9] + [AZ]? )/"
General Note 5.32 5.34 5.36
abcdef 5.33
它应该匹配5.34,5.36和5.33。
这个正则表达式有效(使用负面的lookbehind),但在Javascript中无法使用:
/(?<!Note )\b([0-9]\.[0-9]+[A-Z]?)/g
基于其他Stack Overflow答案,我试图将其转换为可以在Javascript中运行的东西,但我最接近的是:
/^(?!Note).+\b([0-9]\.[0-9]+[A-Z]?)/g
在网站上,我看到这与5.34匹配,但不是5.33或5.36。
在Chrome控制台中试用:
text = 'General Note 5.32 5.34 5.36\nabcdef 5.33';
text.match(/^(?!Note).+\b([0-9]\.[0-9]+[A-Z]?)/g)
然后我得到以下内容,这也不是我想要的内容:
["General Note 5.32 5.34 5.36"]
有人可以建议我应该做什么吗?
答案 0 :(得分:1)
如果没有lookbehind,您可以使用此基于交替的正则表达式并使用捕获的组#1 进行匹配:
/\bNote \b\d\.\d+[A-Z]?\b|\b(\d\.\d+[A-Z]?)\b/g
<强>代码:强>
var re = /\bNote \b\d\.\d+[A-Z]?\b|\b(\d\.\d+[A-Z]?)\b/g;
var str = 'General Note 5.32 5.34 5.36\nabcdef 5.33';
var m;
var matches = [];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex)
re.lastIndex++;
if (m[1])
matches.push(m[1]);
}
console.log(matches);
//=> ["5.34", "5.36", "5.33"]