修改正则表达式,以便仅捕获[a-zA-Z]

时间:2018-02-17 15:29:35

标签: javascript regex capturing-group

我有以下正则表达式: lea 它的工作原理是检测短语何时与正则表达式匹配,但我特意尝试捕获/i'm [a-zA-Z]|i am [a-zA-Z]*/i部分。 例如:

[a-zA-Z]

告诉我这个问题是否需要改进。 提前致谢! ^^

2 个答案:

答案 0 :(得分:1)

自2018年起,Javascript最终支持lookbehind断言,因此一旦实现,以下内容应该在最新的浏览器中>



test = "i am sam";

console.log(test.match(/(?<=i'm |i am )[a-zA-Z]+/))
&#13;
&#13;
&#13;

UPD:在撰写本文时,只有Chrome可以做到这一点,因此这个答案将在几个月后生效。与此同时,

&#13;
&#13;
test = "i am sam";

console.log(test.match(/(?:i'm |i am )([a-zA-Z]+)/)[1])
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用捕获组([a-zA-Z]+)捕获您的单词:

I ?['a]m ([a-zA-Z]+)

这将匹配

I          # Match I
 ?         # Match an optional white space
['a]m      # Match ' or a followed by an m and a whitespace
(          # Capture in a group
 [a-zA-Z]+ # Match lower or uppercase character one or more times
)          # Close capturing group

你的话在第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]);
}