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



我在学习正则表达式,现在我觉得很困惑。

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]这样的东西,它在两侧都是一样的?

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

此正则表达式替换字符串中所有开始和结束的非字母数字字符。

  1. 它没有具体指定空白。它只是否定除了字母数字字符之外的所有东西。方括号内的是一个字符集[Whatever]。字符集内的起始大写字母(^)表示其为否定。所以[^a-zA-Z0-9]*表示除a-z、a-z或0-9之外的零个或多个字符。

  2. 末尾的$符号表示,位于字符串末尾,与$和_符号无关。这将已经包含在字符集中,因为它都是非字母数字字符。

  3. 参考@smathy的回答。

同样仅供参考,AFAIU正则表达式不能通过滚动教程来学习。你只需要复习一下基础知识并尝试一下例子。

一些基本信息。

当你阅读正则表达式时,你会从左到右阅读它们。引擎就是这样做的。

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

但在$(EOL或EOS)锚点的情况下,从右到左读取可能更容易。

内置断言,如换行锚^$和单词边界b,以及普通断言向前看(?=)(?!)和向后看(?<=)(?<!),不使用字符。

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

格式化正则表达式,这样您就可以看到它的作用。(使用应用程序帮助您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是否在那里(在*的情况下,或更多的量词)。

祝你好运,继续学习。

要回答您的第三个问题,备选方案一直运行到//,因此双方并不相同。在原始正则表达式中,左边的可选项是"字符串的开始处的所有非字母数字",右边的可选项则是"字符串结束时的所有非字符数字"。

相关内容

最新更新