正则表达式匹配具有特定字符串的字符串在第n个到最后一个单词

时间:2016-03-17 01:52:22

标签: regex regex-lookarounds

我试图在" nth"中使用特定字符串匹配字符串。言归正传。

在这种情况下,带有字符串的单词" call"在他们的倒数第二个字。

我尝试过最成功的事情:

/.*(?=.*call.*)(\w+)\s(\w+)$/

我得到的回应以及我正在寻找的回应:

  • "打电话给她" - >应该返回 - > "打电话给她"
  • "他们打电话给" - >应该返回 - > "他们用"
  • 打电话
  • "你应该打电话给" - >是匹配但不应该
  • "您的通话已准备好" - >目前不匹配,不应该

建议?

2 个答案:

答案 0 :(得分:2)

您的主要问题是您正在使用前瞻性(?=...),这让人感到困惑。这与您的正则表达式匹配,然后必须跟随单词call。也许您打算使用非捕获组:(?:...)

/.*(?:.*call.*)(\w+)\s(\w+)$/

你实际上并不需要这样做,因为未分组的东西也不会被捕获:

/.*call.*(\w+)\s(\w+)$/

在您改变之后,您会遇到以下问题:" call"你匹配了 "任意字符后跟一个或多个单词字符后跟一个空格和一个或多个单词字符"

那将匹配:

  只要最后有两个单词,

就会用很多单词调用

但不是:

  打电话给我

因为电话后不会有至少两个字。

我认为您希望匹配以&#34结尾的字符串;调用后跟任意数量的字符,空格和任意数量的字符":

/.*call(\w*)\s(?:\w+)$/

如果你确实想要匹配"打电话"您可以根据需要更改捕获/非捕获组。

Here's an example

答案 1 :(得分:0)

如果我理解正确,你就不需要使用前瞻/后面......

你只需要正则表达式,检查你是否有东西然后"调用",然后最终的东西,然后是空格,然后是另一个单词和字符串结尾。

/.*call[^\s]*\s[A-Za-z]+$/

我认为你需要这个正则表达式。