如果正则表达式为空,则匹配最后一个字符,紧邻最后一个字符

时间:2014-03-28 00:49:29

标签: javascript regex string-matching

我试图获取字符串的最后一个字符,但前提是它与以下RegEx匹配:

/\W/

如果它不匹配,我希望它移动到下一个最后一个字符并再次进行测试,直到找到匹配为止。

function getLastChar(s) {
    var l = s.length - 1;

    return s[l - i]; // need logic to keep checking for /\W/
}
getLastChar('hello.'); // returns '.', want it to return 'o'

如果字符不是字母/数字,我有如下匹配的想法;但是,我正在寻找一个更优雅的解决方案,这个解决方案允许我在一行中使用三元if()

返回最后一个匹配字符

if(string.match(/\W/) !== null){ //keep looking for a match, going backwards. }

3 个答案:

答案 0 :(得分:2)

/(\w)\W*$/

捕获一个\w字符,后跟零个或多个\W字符,锚定在主题的末尾。

[评论后编辑。]

答案 1 :(得分:0)

足够简单..只做一个贪婪的比赛直到最后\W

string.match(/.*(\W)/)

答案 2 :(得分:0)

如果您正在寻找一个简单的答案,您可以使用单个正则表达式完成它,不需要循环 - 如下所示:

^.*(\W)[^\W]*$

捕获组将包含最后一个非单词字符。

例如,在~~~~ 99 * 9上运行此正则表达式会将字符*放在捕获组中。

编辑:

然而,在重新阅读你的问题之后,似乎你真的打算使用\ w而不是\ W - 换句话说,你想要最后一个字符,而不是最后一个非单词字符。通过在上面的正则表达式中交换\ W来轻松修复。