所以,我有这个正则表达式,它当前匹配字符串中的最后一个空格及其后面的单词:
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/