匹配集合中多次出现的连续字符

时间:2012-03-29 18:29:32

标签: javascript regex

我正在尝试匹配字符串中一组中一个或多个连续出现的一个/多个特殊字符。

my js:
var exp = new RegExp("^[\^\$\*%#`!]{3}+$"); 
return !exp.test(myString);

不工作。任何帮助将不胜感激。

this i$ a te$t: false
th!$ a te$t: false

th!s is a ^%* test: true 
as it has 3 consecutive characters from my set '^%*'

this is a ^%^&%&%& test: true
as it has 3 or more consecutive characters from my set

修改

我纠正了正则表达式。 这在JavaScript中

var exp = new RegExp("[\^$%#`]{3}"); return exp.test(myString);

为什么说这是匹配? %^ $ ^ $ ^ $ ^& ^& ^& %

此输入最多包含2个字符,并且介于两者之间。

4 个答案:

答案 0 :(得分:3)

new RegExp("[\^\$\*%#`!]{3}");

前导^表示模式必须从字符串的开头开始。尾随$表示模式必须在字符串的末尾结束。这些组合表明唯一有效的匹配是仅由您的特殊字符组成的字符串。

最后,+没有必要,当你找到前3个连续的特殊字符时,你就完成了;它可以匹配5是无关紧要的。

答案 1 :(得分:2)

你在字符串的^和$之间只找到3个字符。你想要用。*填充两端? (或者只是省略^和$)。

http://regexpal.com/总是有帮助的。

答案 2 :(得分:2)

我猜你想要

/[\^$*%#`!]{3,}/
== new RegExp("[\\^$*%#`!]{3,}")

你的字符串应该出现这些字符,而不是由它们组成。另外,.{3}+对我来说似乎很奇怪。


编辑(回答你的扩展问题):

此外,如果要使用反斜杠转义^,则必须在RegExp构造函数的字符串中转义反斜杠本身。您的new RegExp("[\^$%#']{3}")等于/[^$%#']{3}]/,与序列"^ &"匹配。

答案 3 :(得分:1)

试试这个:

正则表达式:

/[\^$*%#`!]{3,}/

Javascript测试:

var result = new RegExp(/[\^$*%#`!]{3,}/).test("%^ $^ $^ $^ &^ &^ & %"); 
// result now "false"
new RegExp(/[\^$*%#`!]{3,}/).test("th!s is a ^%* test"); 
// result is now "true"

我删除了无效的+和一些不必要的转义字符。哦,正如其他用户所建议的那样,不需要锚点^$

然而,如果你想将匹配限制在单词边界(那么它在一组字符的中间不匹配 - 只有当集合在其上时,你可以将正则表达式包装在\b标签中自己的)