我当时正在学习正则表达式,现在我觉得很困惑。
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]的东西,在双方都是一样的呢?
请帮助我理解这一点,发现它有点困惑和困难。
发布于 2014-11-11 06:12:07
一些基本信息。
当您读取正则表达式时,您从左到右读取它们。引擎就是这么做的。
在交替的情况下,这一点很重要,因为左边的总是先尝试的。
但是在$ (EOL或EOS)锚点的情况下,从右到左可能更容易阅读。
内置的断言,如换行锚^$和word boundry \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]+$表示,因为您不关心它是否不存在(在*的情况下,是零或更多的量词)。
好运,继续学习。
https://stackoverflow.com/questions/26857934
复制相似问题