我正在尝试为这个字符串找到一个JavaScript正则表达式:![]()。但是,它需要完全匹配,所以:
`!()[]` // No match
hello!()[] // No match
!()[]hello // No Match
!()[] // Match
!()[] // Match (with a whitespace before and/or after)我试过这个:\b![]()\b。它适用于单词,如\bhello\b,但不适用于这些字符。
发布于 2013-12-19 05:50:00
指定的字符是控制字符,如果要匹配空格,还需要对user进行转义。请尝试以下操作
\s?!(?:\[\]\(\)|\(\)\[\])\s?编辑:添加一个捕获组,以便在需要时提取![]()
EDIT2:我没想到你想让[]和()独立于订单,我已经把它添加到这个http://jsfiddle.net/MfFAd/3/中了
发布于 2013-12-19 05:56:39
这与您的示例相匹配:
\s*!\[\]\(\)\s*

虽然匹配还包括!()[]之前和之后的空格。
我认为\b在这里不起作用,因为![]()不是一个单词。查看此quote from MDN
\b -匹配单词边界。单词边界与一个单词字符之后或之前没有另一个单词字符的位置相匹配。请注意,匹配的单词边界不包括在匹配中。换句话说,匹配的单词边界的长度为零。
发布于 2013-12-20 15:56:35
为了方便起见,让我们创建一个函数:
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![]()'); // []https://stackoverflow.com/questions/20669132
复制相似问题