匹配每个单词,除非它包含一个文字点

时间:2017-12-02 22:51:50

标签: javascript regex

如何匹配所有单词,除非它们包含点,例如

  

我希望匹配所有内容,除了这个以及带有点的类似字词

我尝试了\b(?!\w+\.\w+)\w+\b,但这没有用。

无论我如何使用\w+\\.等,正则表达式引擎仍会匹配部分"忽略。 me "点后面。它有简单的语法吗?只是逃避点似乎不起作用。

1 个答案:

答案 0 :(得分:0)

我建议以下pattern

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

JS / Regex测试:



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|$))