正则表达式将所有角色都放在第一个#的右侧和第一个空格的左边?

时间:2017-05-22 08:30:45

标签: javascript regex

我希望456使用以下字符串中的正则表达式:

jo​hn​#456 18 mai 2017 11:01

我用

进行了测试
#(.*) 

但我保留456 18 mai 2017

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式,它将在#

之后提取数字
.+#(\d+ )

测试了以下数据:

 jo​hn​#456 18 mai 2017 11:01
test123#123 18 mai 2017 11:01
michael#4561218 mai 2017 11:01
'(çà'_(fdlfsnd#456 18 mai 2017 11:01
lrjdlfddfdf#456 18 mai 2017 11:01

正则表达式提取:

456
123
4561218
465
465

Here is a demo on Regex101

Javascript解决方案:



const regex4id = /.+#(\d+)/g;
var text = "jo​hn​#456 18 mai 2017 11:01"
var id =  text.match(regex4id);
if(id != null) {
    p = regex4id.exec(text);
    console.log("p: " + p[1]);
}




答案 1 :(得分:0)

使用Lookahead和Lookbehind:

要离开#并在下一个空格之前,如果你想在不使用捕获组的情况下将其作为完全匹配,你也可以使用正面的lookbehind和lookahead:

(?<=#)\w+(?=\s)
  • (?<=#)是一个积极的外观,可以确保#在比赛之前
  • \w+匹配一个或多个字符(包括字母,数字和下划线)
  • (?=\s)是一个积极的前瞻,可以确保匹配后的空格\s

Regex101 Demo

详细了解lookaheads and lookbehinds here

使用捕获组:

您还可以使用捕获组而不是前瞻和后视来更快地完成此操作。 (虽然只在一场比赛中执行时差异可以忽略不计)

#(\w+)\s

在这里,您可以根据您的语言$1group[1]

引用第1组来提取它
  • #代表文字#
  • (\w+)表示捕获组中的一个或多个字符(第一个捕获组
  • \s代表单个空格

Regex101 Demo

希望这有帮助!