获取所有内容 - 和空间,正则表达式javascript

时间:2018-03-19 16:27:40

标签: javascript regex

输入

ABC - MMM

预期输出

MMM

-space

之后的所有内容

尝试了这个(-\s).+

但我没有摆脱 - 和空间。

https://regex101.com/r/0W7lhD/2

3 个答案:

答案 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).+

以下是further reading

虽然这是正确的方式,但值得注意的是,正如@ctwheels指出的那样,支持目前非常有限。

修改

您可以使用split将字符串转换为数组,然后返回数组中的最后一个字符串。

这是一种稍微冗长的方式,但我认为这样更具可读性。

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

您可以捕获组并从数组中获取最后一个元素。

&#13;
&#13;
console.log(("ABC - MMM".match(/-\s+(.+)/) || []).pop());
&#13;
&#13;
&#13;