【问题标题】:RegExp for Javascript which allows everything but " and % [duplicate]Javascript 的正则表达式,它允许除 " 和 % 之外的所有内容 [重复]
【发布时间】:2014-01-09 01:37:20
【问题描述】:

在正则表达式中:

var r = new RegExp('^[^%"]*$');

^$ 表示什么?它是指字符串的开始和结束还是其他什么。

如果我删除 ^$ 类似:

var r = new RegExp('[^%"]*');

这是一个有效的正则表达式吗?

【问题讨论】:

  • 您实际上不需要输入new RegExpvar r = /^[^%"]*$/; 很好 ;)

标签: javascript regex


【解决方案1】:

^ 和 $ 表示什么?这是否意味着字符串的开始和结束或 别的东西。

[] 字符类之外,^ 匹配行首,$ 匹配行尾。在[] 字符类中,^(在类的开头使用时)表示对不在字符类中的任何字符进行数学运算。

如果我删除 ^ 和 $ 类似:var r = new RegExp('[^%"]*'); ?这是一个有效的正则表达式吗?

是的,这是有效的,只是它不会完成太多工作,因为否定匹配的任一侧都可能存在字符,并且* 匹配定义的字符类的 0 个或多个。

使用regex101.com to test your expressions and play around 之类的东西。

【讨论】:

    【解决方案2】:

    是的 '^' 和 '$' 分别表示字符串的结尾。至少在字符类之外。在字符类中 ^ 表示不是,因此它不会匹配那些否定的字符(在这种情况下是 % 和单引号) 如果删除 ^$ 则即使字符串中包含 % 或 " 以及其他字符,正则表达式也可能会通过

    例子

    "\"50\"%".match(/^[^"%]*$/); // equals null
    "\"50\"%".match(/[^"%]*/); //equals [""]
    "\"50\"%".match(/[^"%]*/g); //equals ["", "50", "", "", ""]
    

    同样在 JS 中,最好的做法是使用 /some regex/gm 而不是 new Regex("Some regex") 创建你的正则表达式

    【讨论】:

    • 为什么最好使用 /some regex/gm
    • 我不同意gm 标志部分。 g 仅在您需要匹配所有匹配项时使用,m 会将换行符视为新字符串的指示符。
    • 它不必以 gm 结尾那些只是正则表达式引擎的标志(g 表示全局,m 表示多行,i 表示不区分大小写)我只是用它们来展示如何通过标志。当您创建一个使用new RegExp 打开的正则表达式时,您将不得不担心转义。因此,如果您匹配的正则表达式中包含 " 和 ',则必须转义一个。那并使用 /regex/ 看起来更好。可能还有更多我忘记了它
    【解决方案3】:

    ^$ 的含义可以通过m 标志值进行更改。

    • 如果设置了m 标志,^$ 将分别匹配的开头和结尾。
    • 如果未设置m 标志,^$ 将分别匹配整个字符串的开头和结尾。

    由于图像优于 1000 字,以下是视觉上的正则表达式:

    ^[^%"]*$
    

    [^%"]*
    

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2022-08-21
      相关资源
      最近更新 更多