【发布时间】:2019-06-26 19:40:09
【问题描述】:
我想实现一个不以 (.js|.jsx|.scss) 结尾的 JavaScript RegEx,执行结果如下,但在 RegEx 之前没有运算符 !。
!/(.js|.jsx|.scss)$/
【问题讨论】:
标签: javascript regex string
我想实现一个不以 (.js|.jsx|.scss) 结尾的 JavaScript RegEx,执行结果如下,但在 RegEx 之前没有运算符 !。
!/(.js|.jsx|.scss)$/
【问题讨论】:
标签: javascript regex string
您需要使用带有交替的否定前瞻来拒绝以您在帖子中提到的那些扩展名结尾的字符串。试试这个正则表达式,
^(?!.*(?:\.jsx?|\.scss)$).*$
var arr = ['abc.js','xyz.jsx','ddd.scss','abc.jsa','xyz.jsxa','ddd.scssd'];
for (s of arr) {
console.log(s+' --> '+/^(?!.*(?:\.jsx?|\.scss)$).*$/.test(s));
}
【讨论】:
?:?如果?: 被移除,它也可以正常工作。
?: 仅用于将组设为非捕获组,因为默认情况下,() 组是捕获组,是的,没有?: 也可以正常工作。一般来说,将组设为非捕获是一个好习惯,除非您确实需要该组(例如用于反向引用或组文本捕获),因为它可以提高组的性能。
你可以用这个
^(?!.*\.(?:jsx?|scss)$).*$
^ - 锚定到字符串的开头。(?!.*\.(?:jsx?|scss)$).* - 要检查的条件jsx, js and scss
$ - 字符串结束。【讨论】: