【问题标题】:JavaScript RegEx not ending with (.js|.jsx|.scss) [duplicate]JavaScript RegEx 不以 (.js|.jsx|.scss) [重复] 结尾
【发布时间】:2019-06-26 19:40:09
【问题描述】:

我想实现一个不以 (.js|.jsx|.scss) 结尾的 JavaScript RegEx,执行结果如下,但在 RegEx 之前没有运算符 !

!/(.js|.jsx|.scss)$/

【问题讨论】:

标签: javascript regex string


【解决方案1】:

您需要使用带有交替的否定前瞻来拒绝以您在帖子中提到的那些扩展名结尾的字符串。试试这个正则表达式,

^(?!.*(?:\.jsx?|\.scss)$).*$

Demo

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));
}

【讨论】:

  • 谢谢,它有效。我想知道为什么在给定的正则表达式中需要?:?如果?: 被移除,它也可以正常工作。
  • @licaomeng: ?: 仅用于将组设为非捕获组,因为默认情况下,() 组是捕获组,是的,没有?: 也可以正常工作。一般来说,将组设为非捕获是一个好习惯,除非您确实需要该组(例如用于反向引用或组文本捕获),因为它可以提高组的性能。
  • 现在清楚了,谢谢。
  • 很高兴为您提供帮助:)
【解决方案2】:

你可以用这个

^(?!.*\.(?:jsx?|scss)$).*$
  • ^ - 锚定到字符串的开头。
  • (?!.*\.(?:jsx?|scss)$).* - 要检查的条件jsx, js and scss
  • $ - 字符串结束。

Demo

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2020-03-10
    • 2011-09-25
    • 2011-07-23
    • 2020-11-24
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多