2017-12-02 105 views
0

我怎么能匹配,除非它们包含一个点的所有单词的每一个字,像匹配,除非它包含点

我想 except.this 等类似的词语用点匹配一切都在他们

我试过\b(?!\w+\.\w+)\w+\b但这没有奏效。

不管我如何使用\w+\\.等解释仍然符合部分“忽略。”点后面。它有一个简单的语法吗?只是逃避这一点似乎并不奏效。

+0

见['(?:\ s | ^)(?!(?:igno \。?reme | ignoreyou)(?!\ S))\ S +'](https://regex101.com/r/NmPWvc/ 3)。 –

+0

你真的需要一个正则表达式还是一个简单的函数就足够了?我猜如果你可以写一个函数,那么它会很快,并将覆盖所有的边缘情况 –

+0

那么,这是做我想做的主流方式。 我正在通过法国服务(dl.free.fr)和FileZilla发送一个较小的大文件,而不是像单个邮件那样获取单个链接,我试图解析信息日志。在这种情况下,我需要获得这种形式的链接(http://dl.free.fr/vtS3cOunq),并忽略这样的链接:(http://dl.free.fr/rm.pl?h=)和这个正则表达式工作: http:\/\/dl.free.fr \/[a-zA-Z0-9] * [^ http:\/\/dl.free.fr^\/rm.pl] 但这让我想到了其他需要忽略“rm.pl”的情况。 – Gemeney

回答

0

我建议以下pattern

(?:^|\s)(?:(?!\.)[\w'])+(?=\s|$|[.?!](?:\s|$)) 

JS /正则表达式测试:

const regex = /(?:^|\s)(?:(?!\.)[\w'])+(?=\s|$|[.?!](?:\s|$))/g; 
 
const str = `aaa blabla fasdfdsa ignoremenot. 
 
bbb igno.reme ad 
 
It's fine?`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
// This is necessary to avoid infinite loops with zero-width matches 
 
if (m.index === regex.lastIndex) { 
 
    regex.lastIndex++; 
 
} 
 

 
// The result can be accessed through the `m`-variable. 
 
m.forEach((match, groupIndex) => { 
 
    console.log(`Found match, group ${groupIndex}: ${match.trim()}`); 
 
}); 
 
}

有一个问题:你要修剪比赛,以消除不必要的空格,可以显示因为我们不能在JavaScript的正则表达式中使用lookbehind,如下所示:(?<=^|\s)(?:(?!\.)[\w'])+(?=\s|$|[.?!](?:\s|$))

+0

好的,谢谢:)。对于点不是微不足道的:/ – Gemeney

+0

没错。我试图涵盖更多的边缘案例,但是,你知道,有一个[说](http://regex.info/blog/2006-09-15/247):有些人在遇到问题时认为 “我知道,我会用正则表达式......”:) – wp78de