Regex 用于匹配数字和特殊字符失败的正则表达式

Regex 用于匹配数字和特殊字符失败的正则表达式,regex,regex-lookarounds,regex-negation,regex-group,regex-greedy,Regex,Regex Lookarounds,Regex Negation,Regex Group,Regex Greedy,下面我的正则表达式与此千数字后的字符。我希望仅当千存在,但如果后跟伏或吨 \(\d{1,}(?:\,?\d{3})*(?:\.\d+)?[ ]?)(!千伏|!千吨|千)\ 目前: 220千伏 (match '220千') 220千吨 (match '220千') 220千 (match '220千') 预期: 220千伏 (no match) 220千吨 (no match) 220千 (match '220千') 我的猜测是,您可能需要一个列表来排除某些内容,并具有其他特定字符,可能类似

下面我的正则表达式与此
数字后的字符。我希望仅当
存在,但如果后跟

\(\d{1,}(?:\,?\d{3})*(?:\.\d+)?[ ]?)(!千伏|!千吨|千)\
目前:

220千伏 (match '220千')
220千吨 (match '220千')
220千 (match '220千')
预期:

220千伏 (no match)
220千吨 (no match)
220千 (match '220千')

我的猜测是,您可能需要一个列表来排除某些内容,并具有其他特定字符,可能类似于:

\d{1,}(?:\,?\d{3})*(?!千伏|千吨)(?:千)
正则表达式 您可以在中设计/修改/更改表达式

正则表达式电路 您可以在以下位置可视化您的表达式:

JavaScript测试
const regex=/\d{1,}(?:\,?\d{3})*(?!千伏|千吨)(?:千)/转基因的
常量str=`220千伏
220千吨
220千`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
有关正则表达式的工作版本,请参见下文

主要思想是使用
千(?![伏吨]),它是一个文本
后跟一个否定的先行断言(与往常一样,
[
]
只是一个字符类)千, 但前提是后面没有伏 或吨.

(我也删除了多余的括号,改变了<代码> { 1,} /代码>到<代码> +/COD>,并将匹配锚定到字符串的开头。如果不需要,至少考虑使用<代码> \b//>(Word界线)锚。

const输入=[
'220千伏',
'220千吨',
'220千',
];
for(输入的常量str){
console.log(
str+(
/^\d+(?:,\d{3})*(?:\。\d+)[]?千(?![伏吨])/.测试(str)
""(匹配)"
:“(不匹配)”
)
);

}
你需要使用否定的前瞻。你为什么要转义
)以及结尾的反斜杠是什么?@Barmar开头/结尾的反斜杠可能是
/
(regex分隔符)的打字版本。仅供参考,量词
{1,}
通常写为
+
。谢谢!原因是什么(\d{1,}(?:\,?\d{3})*(?:\。\d+?[])也匹配220.2千, 2,020.2千, 和2099千