0

我试图提取字符串中最后一个下划线之后的第一个字符,字符串中的“_”数量未知,但在我的情况下,总会有一个字符,因为我在流程的另一个步骤中添加了它。

我尝试的是这个。我也尝试了正则表达式本身从名称中提取,但我的结果是空的。

var s = "XXXX-XXXX_XX_DigitalF.pdf"

var string = match(/[^_]*$/)[1]

string.charAt(0) 

所以最终想要的结果是'D'。如果 RegEx 只能让我知道最后一个 '_' 后面的内容,那很好,因为我知道我可以像当前显示的那样使用 charAt。但是,如果正则表达式可以完成整个事情,那就更好了。

4

1 回答 1

2

如果你知道总会有至少一个下划线,你可以这样做:

var s = "XXXX-XXXX_XX_DigitalF.pdf"

var firstCharAfterUnderscore = s.charAt(s.lastIndexOf("_") + 1);

// OR, with regex

var firstCharAfterUnderscore = s.match(/_([^_])[^_]*$/)[1]

使用正则表达式,您可以通过使用括号来捕获匹配的那部分来仅提取一个字母。但我认为该.lastIndexOf()版本更易于阅读。

无论哪种方式,如果输入中可能没有下划线,您都需要添加一些额外的逻辑。

于 2012-08-24T22:22:09.450 回答