我试图限制某些字符,尤其是.
仅限于正则表达式匹配的中间位置。也就是说,我想匹配Node.js
但不匹配end.
或.css
。
我目前的正则表达式存在一个问题,即至少需要两个字母才能工作:
[\w]+[\w\.']*[\w']+
您还可以在'
或I'm
(论文或其他归因)中看到我想在中间和末尾允许students'
。
这个问题是单个字母单词不匹配,例如。 I
。如何解决?这是一个测试用例:https://regex101.com/r/hV9fQ5/1
答案 0 :(得分:1)
这个似乎恰好匹配了所有测试用例:
(?:^|\s)(?:[\w]+[\w\.']*[\w']+|\w)?(?=\s|$)
它首先匹配行开头或空格字符,然后匹配当前正则表达式或单个\w
,最后断言下一个字符是空白字符,或者匹配位于行尾。这可能不是最好的答案;它保持领先的空间与其余部分,但这可以修剪掉。以下是您的示例测试:https://regex101.com/r/vL7dV4/1
答案 1 :(得分:0)
您可以尝试通过将需求分解为各个部分并照顾其中的每个部分来实现您想要的目标。
想要以
'
或字母开头吗?[']*[\w]
可以 中间有多个.
?[\.w]*
可以以'
或者{。}结尾 信件?[\w]*[']*
所以你最终得到:[']*[\w]+[\.w]*[\w]*[']*
在行动here
中查看答案 2 :(得分:0)
在英语中你想要的是"(1)一个字母,然后是(2)一个零或多个字母的(2a)序列,或(2b)一系列字母,句点或撇号跟随通过一封信或撇号"。
这直接转化为
/^(\w(\w*|[\w.']+[\w']))$/
^^ (1)
^^^^^^^^^^^^^^^^^^^ (2)
^^^ (2a)
^^^^^^^^^^^^^ (2b)
将此用作:
input . split(" ") . filter(function(word) {
return word.match(/regex/g);
});
答案 3 :(得分:0)