【发布时间】:2018-02-17 15:29:34
【问题描述】:
我有以下正则表达式:
/i'm [a-zA-Z]|i am [a-zA-Z]*/i
它在检测短语何时与正则表达式匹配方面起作用,但我特别试图捕获[a-zA-Z] 部分。
例如:
"I'm sam" // -> sam
I am good at this // -> good
如果这个问题需要改进,请告诉我。 提前致谢! ^^
【问题讨论】:
标签: javascript regex capturing-group
我有以下正则表达式:
/i'm [a-zA-Z]|i am [a-zA-Z]*/i
它在检测短语何时与正则表达式匹配方面起作用,但我特别试图捕获[a-zA-Z] 部分。
例如:
"I'm sam" // -> sam
I am good at this // -> good
如果这个问题需要改进,请告诉我。 提前致谢! ^^
【问题讨论】:
标签: javascript regex capturing-group
截至 2018 年,Javascript 终于支持后向断言,因此一旦实现以下内容,在最新的浏览器中应该可以工作:
test = "i am sam";
console.log(test.match(/(?<=i'm |i am )[a-zA-Z]+/))
UPD:在撰写本文时,只有 Chrome 可以做到这一点,所以这个答案将在几个月后生效。与此同时,
test = "i am sam";
console.log(test.match(/(?:i'm |i am )([a-zA-Z]+)/)[1])
【讨论】:
null,则可能存在引用错误
您可以使用捕获组([a-zA-Z]+) 来捕获您的文字:
这将匹配
我#匹配我 ? # 匹配一个可选的空格 ['a]m # 匹配 ' 或 a 后跟一个 m 和一个空格 ( # 抓拍成组 [a-zA-Z]+ # 匹配小写或大写字符一次或多次 ) # 关闭捕获组你的话在第 1 组。
var pattern = /I ?['a]m ([a-zA-Z]+)/;
var strings = [
"I am good at this",
"I'm sam"
];
for (var i = 0; i < strings.length; i++) {
console.log(strings[i].match(pattern)[1]);
}
【讨论】: