我想让它匹配css文件的所有路径,除了一些特定的文件名(file.css
):
var re = /.../;
console.log(re.test('/path/to/file.css')); // false
console.log(re.test('/path/to/file.js')); // false
console.log(re.test('/path/to/file2.js')); // false
console.log(re.test('/path/to/e.css')); // true
console.log(re.test('/path/to/other-file.css')); // true
console.log(re.test('/path/to/file2.css')); // true
然后,如果我也要排除asdfg.css
怎么办?
P.S。问题是关于不能编写代码的情况,只指定正则表达式。
答案 0 :(得分:1)
我想我会做这样的事情:
rate2
我认为这更具可读性,因为排除列表是一个简单的替换,可以很容易地扩展到包含其他文件而不考虑其他因素(例如它们的长度)。
RegExp首先匹配路径中的最后var re = /\/(?!(file|asdfg)\.css$)[^\/]*\.css$/;
console.log(re.test('/path/to/file.css')); // false
console.log(re.test('/path/to/file.js')); // false
console.log(re.test('/path/to/file2.js')); // false
console.log(re.test('/path/to/e.css')); // true
console.log(re.test('/path/to/other-file.css')); // true
console.log(re.test('/path/to/file2.css')); // true
console.log(re.test('/path/to/asdfg.css')); // false
console.log(re.test('/path/to/file/file2.css')); // true
console.log(re.test('/path/to/file.css/file2.css')); // true
(技术上匹配任何斜杠,但后面的代码确保不能有另一个)。然后,它使用否定前瞻检查是否未匹配任何排除的文件。需要将前瞻锚定到字符串的末尾,以确保它不会过于慷慨地排除。在前瞻之后,它只消耗尽可能多的“非斜线”(即文件名),然后检查所有内容是否以/
结束。
答案 1 :(得分:0)
这是我的解决方案:
var re = /\/(.{0,3}|(?!file).{4}|[^/]{5,})\.css$/;
console.log(re.test('/path/to/file.css')); // false
console.log(re.test('/path/to/file.js')); // false
console.log(re.test('/path/to/e.css')); // true
console.log(re.test('/path/to/other-file.css')); // true
对于两个文件:
var re = /\/(.{0,3}|(?!file).{4}|(?!asdfg).{5}|[^/]{6,})\.css$/;
console.log(re.test('/path/to/file.css')); // false
console.log(re.test('/path/to/asdfg.css')); // false
console.log(re.test('/path/to/file.js')); // false
console.log(re.test('/path/to/e.css')); // true
console.log(re.test('/path/to/other-file.css')); // true
如果您了解更好/可读的方式,请随时发布您的答案。