返回第一次出现的Regex不匹配

时间:2017-03-09 08:30:54

标签: javascript jquery regex

我有这样的代码https://jsfiddle.net/tgvtceg3/



var text = "abc(de192/+£,€.&";
var pattern = new RegExp(/^[0-9a-zA-Z\-\,+&.\/]+$/);
var res = pattern.test(text)
alert(res);




我希望代码返回第一次出现在正则表达式中不匹配...例如,在我想要的情况下"("

欢迎任何建议

4 个答案:

答案 0 :(得分:2)

您可以使用负正则表达式进行定义,然后使用string.match(regex)来获取所有匹配项。

要获得第一个不匹配,请执行result[0]

正则表达式:/[^0-9a-zA-Z\-\,+&.\/]/g

这将匹配除了提到的所有字符。



var text = "abc(de192/+£,€.&";
var pattern = new RegExp(/[^0-9a-zA-Z\-\,+&.\/]/g);
var res = text.match(pattern)
console.log(res);
console.log(res[0]);




答案 1 :(得分:2)

您只能使用其他正则表达式来检查使您之前的验证正则表达式无法匹配的文本。使用这样的东西:

var text = "abc(de192/+£,€.&";
var pattern = /^[0-9a-zA-Z,+&.\/-]+$/;
var res = pattern.test(text)
if (!res) {
   var m=text.match(/[^0-9a-zA-Z,+&.\/-]+/) || [""];
   console.log(m[0]);
}

/[^0-9a-zA-Z,+&.\/-]+/正则表达式将找到除原始正则表达式中定义的char之外的第一个char。

编辑:使用动态方法构建图案:

var text = "abc(de192/+£,€.&";
var block = "0-9a-zA-Z,+&./-"; // Define ranges/chars here
var pattern = new RegExp("^[" + block + "]+$"); // Use constructor notation to build the validation regex
var res = pattern.test(text)
if (!res) {
   var m=text.match(new RegExp("[^" + block + "]+")) || [""];
   console.log(m[0]);
}

答案 2 :(得分:0)

this question

中所述
  

你需要使你的正则表达式不贪婪,因为   默认情况下,“(。*)”将匹配所有“文件路径/ level1 / level2”xxx   一些= “XXX”。

所以我希望这会有所帮助,加上'?'到你的正则表达式的末尾使它不正确,并将^移动到正则表达式中的字符部分。 对于调试正则表达式,我使用regex101.com这很棒。

var text = "abc(de192/+£,€.&";
var pattern = new RegExp(/[^0-9a-zA-Z\-\,+&.\/]?/);
var res = pattern.test(text)
alert(res);

答案 3 :(得分:0)

您只需在字符大小写的开头添加^即可查找不在其中的任何字符:



var text = "abc(de192/+£,€.&";
var pattern = new RegExp(/([^0-9a-zA-Z\-\,+&.\/]+)/);
var res = pattern.exec(text);
console.log(res ? res[0] : undefined);