我的字符串如下:
M0122PD12XS1,
M1213234NW,
M1213234EFA1.
我需要按如下方式读取每个字符串中的最后两个/三个字符。末尾的字符后最多有一个数字,而不管其后的数字如何。 我需要阅读以下最后一个字符:
M0122PD12XS1 => XS
M1213234NW => NW
M1213234EFA1=> EFA
我按如下方式使用正则表达式字符串,但是当接下来没有其他数字时,它仅读取最后两个/三个字符。
Regex string : ".{0,0}\D*$".
感谢您的帮助。
答案 0 :(得分:1)
好问题,我们将在所需的两个或三个字母的右侧使用标点符号或空格,并带有一个简单的表达式:
[0-9]([A-Z]{2,3})([0-9])?[,.\s]
,在其左侧,我们将使用现有数字作为左侧边界。
const regex = /[0-9]([A-Z]{2,3})([0-9])?[,.\s]/gm;
const str = `M0122PD12XS1,
M1213234NW,
M1213234EFA1.
M0122PD12XS1
M1213234NW
M1213234EFA1
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
答案 1 :(得分:1)
答案 2 :(得分:1)
我认为应该是
([A-Z]{2,})(?:[,.\s\d]+)?$
如果行中不需要标点,只需
([A-Z]{2,})(?:[\d]+)?$
[A-Z]{2,}
是2个或更多字母,[\d]+)?
是字符串末尾的可选数字。
答案 3 :(得分:1)
[A-Z] {2,3}((?= \ d \ b)|(?= \ r)|(?=。)|(?= \ b))
查找2或3个字母字符[A-Z] {2,3}
最多但不包括(?=)