繁体   English   中英

如何使用 JavaScript 正则表达式提取字符串中的最后一个单词?

[英]How to extract the last word in a string with a JavaScript regex?

我需要的是最后一场比赛。 在没有$符号或任何其他特殊字符的单词test下面的情况下:

测试字符串:

$this$ $is$ $a$ $test$ 

正则表达式:

\b(\w+)\b

$代表字符串的结尾,所以...

\b(\w+)$

但是,您的测试字符串似乎有美元符号分隔符,因此如果这些分隔符始终存在,那么您可以使用它代替\\b

\$(\w+)\$$

 var s = "$this$ $is$ $a$ $test$"; document.body.textContent = /\\$(\\w+)\\$$/.exec(s)[1];

如果可能有尾随空格,则在末尾添加\\s*

\$(\w+)\$\s*$

最后,如果最后可能还有其他非单词内容,则使用\\W*代替。

\b(\w+)\W*$

在某些情况下,一个单词可能由非单词字符进行,例如,取以下句子:

Marvelous Marvin Hagler was a very talented boxer!

如果我们想匹配boxer这个词,之前的所有答案都不够,因为我们在这个词前面有一个感叹号字符。 为了让我们确保成功捕获,以下表达式就足够了,此外还考虑了无关的空格、换行符和任何非单词字符。

[a-zA-Z]+?(?=\s*?[^\w]*?$)

https://regex101.com/r/D3bRHW/1

我们通知以下内容:

  1. 我们只寻找字母,大写或小写。
  2. 我们只会在必要时进行扩展。
  3. 我们利用积极的前瞻性。
  4. 我们排除任何单词边界。
  5. 我们扩大了排除范围,
  6. 我们断言行尾。

这里的好处是我们不需要断言任何标志或单词边界,它将考虑非单词字符并且我们不需要达到否定。

var input = "$this$ $is$ $a$ $test$";

如果你使用var result = input.match("\\b(\\w+)\\b")接下来将返回所有匹配的数组,你可以通过对结果使用pop()或通过执行以下操作来获取它: result[result.length]

您的正则表达式会找到一个单词,并且由于正则表达式从左到右运行,它将找到第一个单词。

\\w+匹配尽可能多的连续字母数字字符,但它必须至少匹配 1 个。
\\b匹配非字母数字字符旁边的字母数字字符。 在您的情况下,这与'$'字符匹配。

您需要的是将您的正则表达式锚定到输入的末尾,该输入在正则表达式中由$字符表示。

例如,为了支持在行尾可能有多个'$'字符、空格或句点的输入,您可以使用\\W+匹配尽可能多的非字母数字字符:

\$(\w+)\W+$

避免使用正则表达式 - 使用.split.pop结果。 使用.replace删除特殊字符:

var match = str.split(' ').pop().replace(/[^\w\s]/gi, '');

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM