如何使用正则表达式获取第一个词和最后一个词

How can I get the first and last word using regex

我知道使用正则表达式你可以得到每个单词和它们的第一个字母:

/\b(\w)/g,

但是还有办法得到第一个词吗?(我尝试了很多谷歌搜索,但找不到同时做这两个词的方法,而不是第一个词或最后一个词) 我相信应该可以在 1 个正则表达式而不是 2 个不同的正则表达式中得到两者。

我的字符串和想要的结果的示例?

字符串:世界先生你好

会回馈:['H'、'w']

^\w|\b\w(?=\S+$)

尝试 this.See 演示。

https://regex101.com/r/fA6wE2/31

编辑:

^\s*(\w)|\b(\w)(?=\S+$)

如果开头有空格,则使用它并抓取组或捕获。

虽然它只会处理相当具体的输入,但您应该能够使用类似的东西:

var test = [
  "Get the first and last word",
  "Hello world!",
  "foo bar",
  "this is a test, for matches",
  "test"
];

var rex = /^((\w*)\s?).*?(\s?(\w*)[^\w\s]*)$/;

test.forEach(function(it) {
  document.getElementById("results").textContent += JSON.stringify(rex.exec(it)) + "\n";
});
<pre id="results"></pre>

第 2 场和第 4 场将为您提供第一个和最后一个单词的修剪版本。

分解,正则表达式 /^((\w*)\s?).*?(\s?(\w*)[^\w\s]*)$/:

  1. 匹配单词字符的第一个序列,可选地后跟空格(匹配 1 是完整序列,匹配 2 不包括结尾的空格字符)。
  2. 匹配任何内容,但为最后的单词匹配留出空间。
  3. 匹配另一个可选的空白字符,然后是一些单词字符,然后是任何其他字符(可能是标点符号)(匹配 3 是完整序列,匹配 4 不包括前导空白和尾随标点符号)
^(\w).*\b(\w).*?$

会给你想要的东西。 regex101