正则表达式 - val.replace(/ ^ [^ a-zA-Z0-9] * | [^ a-zA-Z0-9] * $ / g,"'');

时间:2014-11-11 05:10:00

标签: javascript jquery regex web

我正在学习正则表达,现在对我来说似乎非常困惑。

val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '');

在上面的表达中

1)哪一部分表示不包括空格?因为我试图排除所有非字母数字字符。

2)因为我不想使用偶数' $'和' '(下划线)我可以指定' $' &安培; ' '(下划线)表达式如下所示?

val.replace(/^[^a-zA-Z0-9$_]*|[^a-zA-Z0-9$_]*/g, '');?

3)' x|y'指定 - "找到指定的任何替代方案"。那么为什么我们使用了这两面相同的[^a-zA-Z0-9]|[^a-zA-Z0-9]呢?

请帮助我理解这一点,发现它有点困惑和困难。

3 个答案:

答案 0 :(得分:4)

一些基本信息。

当您阅读正则表达式时,您可以从左到右阅读它们。这就是发动机是如何做到的。

这在交替的情况下很重要,因为总是首先尝试左侧的那个。

但是对于$(EOL或EOS)锚点,从右到左阅读可能更容易。

内置断言,如换行符^$和单词边界\b以及正常断言向前看(?=)(?!)并向后看(?<=)(?<!),不要消耗字符。< / p>

它们就像通过或失败的单路径内联条件,只有在它通过时才会检查它右侧的表达式。所以他们确实匹配的东西,他们匹配一个条件。

格式化你的正则表达式,这样你就可以看到它的作用。 (使用应用程序来帮助您RegexFormat 5

   ^                # BOS
   [^a-zA-Z0-9]*    # Optional not any alphanum chars
|                 # or, 
   [^a-zA-Z0-9]*    # Optional not any alphanum chars
   $                # EOS

全局上下文中的正则表达式将始终匹配两次,一次在字符串的开头,一次在结尾处,因为换行锚点,并且因为您实际上并不需要任何其他匹配。

所以基本上你应该避免尝试将所有可选事物与内置锚点^$\b匹配(混合)。这意味着您的正则表达式更好地由^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$表示,因为您不关心其 NOT (在*的情况下,零或更多量词)。

祝你好运,继续学习。

答案 1 :(得分:3)

此正则表达式替换字符串中的所有起始和尾随非字母数字字符。

  1. 它没有具体指定空格。它只是否定了除字母数字字符以外的所有内容。方括号内的任何内容都是字符集 - [Whatever]。字符集中的起始上限(^)表示其为否定。因此[^a-zA-Z0-9]*表示零个或多个字符不是a-z,A-z或0-9。

  2. 最后的$符号表示字符串的结尾,与$和_符号无关。这将包含在字符集中,因为它包含所有非字母数字字符。

  3. 请参阅@smathy的回答。

  4. 同样只是FYI,滚动教程无法学习AFAIU正则表达式。您只需要了解基础知识并尝试示例。

答案 2 :(得分:1)

为了回答你的第三个问题,替代方案一直运行到//,所以双方都不一样。在最初的正则表达式中,左边的替代品是#34;字符串的开始的所有非字母数字&#34;正确的选择是&#34;字符串&#34; 结尾的所有非字母数字。