📜  js 正则表达式查找字符串但不是另一个 - Javascript (1)

📅  最后修改于: 2023-12-03 14:43:32.590000             🧑  作者: Mango

JS 正则表达式查找字符串但不是另一个

在使用正则表达式时,我们有时需要查找含有特定字符串但不是另一个字符串的内容。这可以通过使用负向前瞻和负向后瞻来实现。

负向前瞻

负向前瞻可以匹配不含特定字符串的内容。它的语法为(?!expression)

例如,我们想查找所有以cat开头但不是以caterpillar开头的字符串:

const str = 'cat in the hat, but not caterpillar in the hat.';
const regex = /^cat(?!erpillar)/g;
const matches = str.match(regex);
console.log(matches); // ["cat in the hat, but not "]

在上面的例子中,^cat匹配字符串开头的"cat",(?!erpillar)表示后面不能跟着"erpillar"。因此,只有字符串"cat in the hat, but not "被匹配。

负向后瞻

负向后瞻可以匹配不以特定字符串结尾的内容。它的语法为(?<!expression)

例如,我们想查找所有以.com结尾但不是以google.com结尾的字符串:

const str = 'hey, check out my website at www.example.com or yahoo.com, but not google.com.';
const regex = /(?<!google)\.com/g;
const matches = str.match(regex);
console.log(matches); // [".com", ".com"]

在上面的例子中,\.com匹配以".com"结尾的字符串,(?<!google)表示前面不能跟着"google"。因此,只有字符串"www.example.com"和"yahoo.com"被匹配。

总结

使用负向前瞻和负向后瞻可以非常方便地查找特定的字符串但不另一个字符串。它们的语法虽然有些复杂,但熟悉了之后将会大大提高我们的正则表达式处理能力。

代码片段
const str = 'cat in the hat, but not caterpillar in the hat.';
const regex = /^cat(?!erpillar)/g;
const matches = str.match(regex);
console.log(matches); // ["cat in the hat, but not "]

const str = 'hey, check out my website at www.example.com or yahoo.com, but not google.com.';
const regex = /(?<!google)\.com/g;
const matches = str.match(regex);
console.log(matches); // [".com", ".com"]
参考资料