如何使用RegEx检测字符串中的字符组?

时间:2019-06-10 21:33:21

标签: regex

我的字符串如下:

M0122PD12XS1, 
M1213234NW, 
M1213234EFA1.

我需要按如下方式读取每个字符串中的最后两个/三个字符。末尾的字符后最多有一个数字,而不管其后的数字如何。 我需要阅读以下最后一个字符:

M0122PD12XS1 => XS
M1213234NW => NW
M1213234EFA1=> EFA

我按如下方式使用正则表达式字符串,但是当接下来没有其他数字时,它仅读取最后两个/三个字符。

Regex string : ".{0,0}\D*$".

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

好问题,我们将在所需的两个或三个字母的右侧使用标点符号或空格,并带有一个简单的表达式:

[0-9]([A-Z]{2,3})([0-9])?[,.\s]

,在其左侧,我们将使用现有数字作为左侧边界。

Demo

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)

这可能是您需要的:

.*[0-9]([a-zA-Z]+)

here用于测试,将here用于可视化。

答案 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}

最多但不包括(?=)

  • 单数字,后跟单词边界(?= \ d \ b)
  • 返回字符(?= \ r)
  • 句号(?= \。)
  • 单词边界(?= \ b)