在javascript中使用正则表达式捕获文本

时间:2015-03-03 23:38:13

标签: javascript regex

我想在javascript中捕获文本。该字符串采用以下格式。

*** Aug 29 2010 3:32PM username: and more texts in here

我想从文本中捕获用户名。我怎么能用正则表达式做到这一点?我尝试了许多不同的东西,但没有一个产生我想要的东西。用户名可以包含数字但不包含符号,并且是一个单词。

7 个答案:

答案 0 :(得分:1)

我假设小时总是以这种方式显示,最终的:始终存在:

/\d:\d\d\S\S (.*?):/g

应该捕获用户名并将其正确存储在第一个捕获组中。

演示1: https://www.regex101.com/r/pR7eT5/1
演示2: https://www.debuggex.com/r/NSlFDyt9toMCu7nJ

答案 1 :(得分:1)

一个简单的正则表达式:

\w+(?::)

这是冒号前的用户名。

如果你想要一个必须在时间和冒号之间的更具体的那个,那么使用:

(?:AM|PM)(?: )\w+(?::)

欢迎您在此处使用您的数据对其进行测试:RegexPal

只需将Regex粘贴到第一个框中,然后将数据粘贴到第二个框中。

修改 由于某些原因,非捕获组对JS替换无关紧要,因此我们可以使用捕获组将信息分成几部分:

var info = document.getElementById('info');
var newStr = info.innerHTML;
newStr = newStr.replace(/(AM|PM) (\w+):/g, '$1 <span class="label label-success">$2</span>:');
info.innerHTML = newStr;

*假设id="info"元素具有数据

Demo

答案 2 :(得分:0)

一个简单的就是 str.replace(/.* (.*):/, "$1");

接受你的字符串并在$ 1中捕获最后一个空格和冒号之间的文本,然后用它替换字符串。

  • /.* /#忽略所有内容,直到最后一个空格
  • /(。*):/#捕获所有字符,直到冒号

答案 3 :(得分:0)

如果您确定用户名是一个世界并且它在日期之后,那么您可以在用空格分割字符串后使用该位置

var line = "*** Aug 29 2010 3:32PM username: and more texts in here";
var user = line.split(' ', 6)[5].replace('\:', '');
alert(user)

或仅使用正则表达式匹配字符串:3:32PM username:

var line = "*** Aug 29 2010 3:32PM username: and more texts in here";
var regex = /(\d:\d\d(?:AM|PM) )(.*?):/
alert(regex.exec(line)[2]);

答案 4 :(得分:0)

请参阅非捕获组AM内的PM(?:),后跟空格\s

然后捕获()任何单词字符w++用于多个

在上一个集合和文字符号:

之间
(?:AM|PM)\s(\w+):

<强> Live example

因此,如果您想要一个函数来简化用户名的检索,您可以这样做:

function getUsername( str ) {
  return (/(?:AM|PM)\s(\w+):/.exec(str)||'')[1];
}

var userName = getUsername("*** Aug 29 2010 3:32PM username: and more texts in here");

如果找不到匹配项,上述内容将成功返回所需的用户名或undefined

答案 5 :(得分:-1)

你可以使用这种模式

:\S+\s([^:]+)

Demo

:               # ":"
\S              # <not a whitespace character>
+               # (one or more)(greedy)
\s              # <whitespace character>
(               # Capturing Group (1)
  [^:]          # Character not in [^:]
  +             # (one or more)(greedy)
)               # End of Capturing Group (1)

答案 6 :(得分:-1)

如果没有正则表达式,您可以更快地完成此操作:

str.split(' ').slice(5).join(' ').slice(0, -1);