javascript - 匹配后的正则表达式

标签 javascript regex

所以,我有这个正则表达式,它当前匹配字符串中的最后一个空格及其后面的单词:

var regex = /\s+\S*$/m 

例如:

'this match'.match(regex) == [" match"]

但是,如果整个字符串只是一个空白字符,然后是单词字符,它仍然会匹配。 (例如' match')

我试验过 "not followed by" quantifier ,但我最接近的是匹配我首选输出的倒数:

var regex = /\S+(?=\s+\S*$)/m
'this match'.match(regex) == ["this"]

我希望它只匹配一个空格,然后匹配一个单词(如果该匹配后跟任意数量的单词字符)

所以我希望它匹配最后一个空格和单词:'multiple <em>words</em>'

但根本不匹配:' word'

编辑: 我应该补充一点,我打算使用 search() 方法(或类似的方法)来获取匹配开始时字符的索引。出于说明目的,我仅使用上面的 match() 方法。

最佳答案

你可以使用这样的东西:

/.(\s\w+)/

这将匹配第 1 组中捕获的任何字符后跟空白字符,后跟一个或多个单词字符。然后您只需提取该组。例如:

'multiple words'.match(/.(\s\w+)/)[1] // " words"
' word'.match(/.(\s\w+)/)             // null

请注意,我在此模式中使用了 .,因为这个问题对于您想要匹配的内容有点含糊,仅引用“只是一个空白字符然后是单词字符”。如果您想确保捕获组之前有一些单词字符,请使用如下内容:

/\w\s*(\s\w+)/

使用第一个模式获取第一个匹配项的索引非常简单。只需使用 search并添加 1:

'multiple words'.search(/.(\s\w+)/) + 1 // 8
' word'.match(/.(\s\w+)/) + 1           // 0 (not found)

但如果您使用第二种模式,则要困难得多。 JavaScript 没有提供一种简单的方法来获取每个捕获组的位置。你能做的最好的就是使用 exec这将为您提供捕获组 找到匹配项的索引,然后执行如下操作:

match = /\w\s*(\s\w+)/.exec('multiple words');
index = match.index + match[0].length - match[1].length; // 8

match = /\w\s*(\s\w+)/.exec(' words');                   // undefined

关于javascript - 匹配后的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714155/

相关文章:

java - 在 Java 中查找正则表达式的第一个匹配项的索引

regex - Python 正则表达式命名组

Python 正则表达式 : Replace individual characters in a match

javascript - 在 Web 应用程序中存储大量 session 数据的最佳方式是什么?

javascript - 如何使用 Bootstrap 和 Angular 表单逐步验证表单?

javascript - 如何使用 HTML/Javascript 替换 Windows 8 应用程序上应用栏中的按钮?

r - 转换列表输出以在 dplyr 管道中创建 data.frame

JAVA正则表达式删除html标签和内容

javascript - Angular UI 路由器 : Nested Views Not Working

javascript - 如何以编程方式选择输入类型为 ="file"的本地文件