JS正则表达式匹配特殊字符

时间:2013-12-18 21:48:12

标签: javascript regex

我正在尝试为此字符串找到JavaScript regexp:![]()。不过,它需要完全匹配,所以:

`!()[]`      // No match
hello!()[]   // No match
!()[]hello   // No Match
!()[]        // Match
 !()[]       // Match (with a whitespace before and/or after)

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

4 个答案:

答案 0 :(得分:3)

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

\s?!(?:\[\]\(\)|\(\)\[\])\s?

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

EDIT2:我错过了您想要[]()的独立订单我已将其添加到此小提琴中http://jsfiddle.net/MfFAd/3/

答案 1 :(得分:1)

这符合您的示例:

\s*!\[\]\(\)\s*

Regular expression visualization

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

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

  

\ b - 匹配单词边界。单词边界匹配单词字符未被跟随或前面的另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。

答案 2 :(得分:1)

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

function find(r, s) {
    return (s.match(r) || []).slice(-1);
}

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

var r = /^\s*(!\[\]\(\))\s*$/;
find(r, '![]() ');      // ["![]()"]
find(r, '!()[] ');      // []
find(r, 'hello ![]()'); // []

这个搜索由空格或字符串边界包围的子字符串:

var r = /(?:^|\s)(!\[\]\(\))(?:\s|$)/;
find(r, '![]() ');      // ["![]()"]
find(r, 'hello ![]()'); // ["![]()"]
find(r, 'hello![]()');  // []

答案 3 :(得分:0)

要匹配除字母和数字之外的所有字符,您可以使用此正则表达式

/[^A-Z0-9]/gi

g - 搜索全局[平均全文,而不仅仅是第一场比赛] 我不敏感的

删除任何其他符号,例如. and ,

/[^A-Z0-9\.\,]/gi

为了匹配完全字符串,您需要将其分组并将其与全局参数

组合
/(\!\[\]\(\))/g 

所以它会搜索所有比赛