首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS regexp匹配特殊字符

问JS regexp匹配特殊字符
EN

Stack Overflow用户
提问于 2013-12-19 05:48:12
回答 4查看 63关注 0票数 2

我正在尝试为这个字符串找到一个JavaScript正则表达式:![]()。但是,它需要完全匹配,所以:

代码语言:javascript
复制
`!()[]`      // No match
hello!()[]   // No match
!()[]hello   // No Match
!()[]        // Match
 !()[]       // Match (with a whitespace before and/or after)

我试过这个:\b![]()\b。它适用于单词,如\bhello\b,但不适用于这些字符。

EN

回答 4

Stack Overflow用户

发布于 2013-12-19 05:50:00

指定的字符是控制字符,如果要匹配空格,还需要对user进行转义。请尝试以下操作

代码语言:javascript
复制
\s?!(?:\[\]\(\)|\(\)\[\])\s?

编辑:添加一个捕获组,以便在需要时提取![]()

EDIT2:我没想到你想让[]和()独立于订单,我已经把它添加到这个http://jsfiddle.net/MfFAd/3/中了

票数 3
EN

Stack Overflow用户

发布于 2013-12-19 05:56:39

这与您的示例相匹配:

代码语言:javascript
复制
\s*!\[\]\(\)\s*

​

​

虽然匹配还包括!()[]之前和之后的空格。

我认为\b在这里不起作用,因为![]()不是一个单词。查看此quote from MDN

\b -匹配单词边界。单词边界与一个单词字符之后或之前没有另一个单词字符的位置相匹配。请注意,匹配的单词边界不包括在匹配中。换句话说,匹配的单词边界的长度为零。

票数 1
EN

Stack Overflow用户

发布于 2013-12-20 15:56:35

为了方便起见,让我们创建一个函数:

代码语言:javascript
复制
function find(r, s) {
    return (s.match(r) || []).slice(-1);
}

以下正则表达式仅接受搜索的字符串和空格:

代码语言:javascript
复制
var r = /^\s*(!\[\]\(\))\s*$/;
find(r, '![]() ');      // ["![]()"]
find(r, '!()[] ');      // []
find(r, 'hello ![]()'); // []

此命令搜索由空格或字符串边界包围的子字符串:

代码语言:javascript
复制
var r = /(?:^|\s)(!\[\]\(\))(?:\s|$)/;
find(r, '![]() ');      // ["![]()"]
find(r, 'hello ![]()'); // ["![]()"]
find(r, 'hello![]()');  // []
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20669132

复制
相关文章

相似问题

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