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

如何使用JavaScript正则表达式提取字符串中的最后一个单词?,javascript,regex,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[

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

测试字符串:

$this$ $is$ $a$ $test$ 
正则表达式:

\b(\w+)\b

$
表示字符串的结尾,因此

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

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


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

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

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

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

要支持在行尾、空格或句点处可能不止有一个
'$'
字符的输入,您可以使用
\W+
,它可以匹配尽可能多的非字母数字字符:

\$(\w+)\W+$

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

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

或在字符串上使用
.split
,然后用
.pop
抓住最后一个元素。更简单。使用
input.match(/\b\w+\b/g).pop()@Andy我在添加我的答案后注意到了你的评论,我同意。尽可能避免使用正则表达式。如果你把这个放在一个答案中,你至少会从我这里得到+1:)@Andy和@Jonathan Mee,如何告诉
split
除了空格外还使用特殊字符?@pgschr我会解释一下,但最简单的方法是在空格上拆分,把你的最后一个元素切掉,去掉第一个和最后一个字符。为什么我要写一个regexp,返回所有匹配项,然后选择最后一个,而不是只写一个regexp,选择最后一个开始?我甚至不知道这是可能的,我想唯一有效的答案是你的最后一个regex。前三个不符合确认标准。@GarisMSuero:我不知道实际的字符串可能是什么。如果测试字符串代表实际的字符串格式,那么除了第一个之外,其他所有的都应该工作。如果他使用
$
作为一种奇怪的方式来表示单词边界,那么第一种方法就行了。这个问题并不完全清楚,所以我给了每个选项。是的,我同意,但他也说:“如果没有$sign或任何其他特殊字符,这怎么可能实现?”@GarisMSuero:是的,你是对的。最后一个是它。这个解决方案除了空间之外不考虑特殊字符。