如何匹配所有单词,除非它们包含点,例如
我希望匹配所有内容,除了这个以及带有点的类似字词
我尝试了\b(?!\w+\.\w+)\w+\b
,但这没有用。
无论我如何使用\w+
,\\.
等,正则表达式引擎仍会匹配部分"忽略。 me "点后面。它有简单的语法吗?只是逃避点似乎不起作用。
答案 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|$))