2017-03-09 98 views
1

我有这样https://jsfiddle.net/tgvtceg3/返回正则表达式的第一次出现不匹配

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

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

任何建议,欢迎

+1

这真的不清楚是什么你“问。请提供更多关于您期待的结果的信息,以及为什么这对您不适用 –

+0

right ...我编辑了我的帖子 –

+0

[正则表达式停止在第一个匹配]的可能的副本(http://stackoverflow.com/questions/2503413/regular-expression-to-stop-at-first-match) – gyre

回答

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,+&.\/-]+/正则表达式会发现比你原来的正则表达式定义的其它炭的第一次出现。

编辑:使用动态的方法来图案制作:

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]); 
 
}

+0

谢谢......你知道我可以如何从这个改变为dinamically /^[0-9a-zA-Z,+&.// - ] + $/to this/[^ 0-9a-zA-Z,+&。\/- ] +/...替换? –

+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]);

0

正如this question

你需要让你的正则表达式非贪婪的描述,因为通过 默认,“(。*)”将匹配所有“文件路径/列弗el1/level2“xxx some =”xxx“。

所以我希望这将有助于,通过添加'?'到你的正则表达式的结尾,使其不真实,并将^移动到正则表达式中的字符部分。 为调试正则表达式,我使用regex101.com这是伟大的。

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

0

您可以只需添加一个^到个性外壳的开始寻找任何字符不是它里面:

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

+0

对不起,但请检查其他答案,因为这已经包含在1个以上的答案。 – Rajesh

+0

@Rajesh这个答案也简要地解释了逻辑以及处理'res'没有匹配的情况(除了使用'exec'而不使用不需要的'g'修饰符外)。顺便说一句,我看到你的答案之前写了这个。 –

相关问题