我正在尝试匹配字符串中一组中一个或多个连续出现的一个/多个特殊字符。
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个字符,并且介于两者之间。
答案 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
标签中自己的)