答案 0 :(得分:5)
所以有很多方法可以解决这个问题。最简单且可能最好的方法是根本不使用正则表达式。
方法1 - 拆分
当然,您需要添加一项检查以确保元素[1]
存在,但这会向您展示获取MMM
的一般概念。
console.log("ABC - MMM".split(" - ")[1])
方法2 - 正则表达式组
此方法将您想要的所有内容分组到捕获组1中。
console.log("ABC - MMM".match(/-\s(.+)/)[1])
方法3 - 正则表达式背后隐藏
这是Andrew Bone in his answer here建议的。虽然这有效,但它目前仅支持Chrome 62+(目前浏览器在浏览器中几乎没有支持)。您可以看到RegExp Lookbehind Assertions proposal here as part of EMCA TC39。
console.log("ABC - MMM".match(/(?<=-\s).+/)[0])
答案 1 :(得分:1)
您想要使用positive lookbehind
,这意味着在模式之后查找但不包括模式。语法为?<=
(?<=-\s).+
虽然这是正确的方式,但值得注意的是,正如@ctwheels指出的那样,支持目前非常有限。
修改强>
您可以使用split将字符串转换为数组,然后返回数组中的最后一个字符串。
这是一种稍微冗长的方式,但我认为这样更具可读性。
var string = "ADSD - ASDASD";
var regex = /(-\s)/;
function matchAfter(string, pattern) {
var short = string.split(pattern);
return short[short.length - 1];
}
console.log(matchAfter(string, regex));
&#13;
答案 2 :(得分:0)
您可以捕获组并从数组中获取最后一个元素。
console.log(("ABC - MMM".match(/-\s+(.+)/) || []).pop());
&#13;