首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式-val.replace(/^[^a-Za-Z0-9]*x[^a-Za-Z0-9]*$/g,"'');

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

Stack Overflow用户
提问于 2014-11-11 05:10:00
回答 3查看 21.8K关注 0票数 1

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

代码语言:javascript
运行
复制
val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '');

在上面的表达式中

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

2)由于我不想使用偶数'$‘和’‘(下划线),所以可以在表达式中指定'$’&‘’(下划线),如下所示?

代码语言:javascript
运行
复制
val.replace(/^[^a-zA-Z0-9$_]*|[^a-zA-Z0-9$_]*/g, '');?

3)如'x|y‘所示-“查找指定的任何替代品”。那么,为什么我们使用类似[^a-zA-Z0-9]|[^a-zA-Z0-9]的东西,在双方都是一样的呢?

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

EN

Stack Overflow用户

发布于 2014-11-11 06:12:07

一些基本信息。

当您读取正则表达式时,您从左到右读取它们。引擎就是这么做的。

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

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

内置的断言,如换行锚^$和word boundry \b,以及普通的断言--向前看(?=)(?!),看后面的(?<=)(?<!) --不要使用字符。

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

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

代码语言:javascript
运行
复制
   ^                # 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]+$表示,因为您不关心它是否不存在(在*的情况下,是零或更多的量词)。

好运,继续学习。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26857934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档