2017-10-16 101 views
4

我要接受的话和一些特殊字符的一部分的字符,所以如果我正则表达式 不完全匹配,让我们说我显示错误,使用Javascript - 正则表达式 - 如何筛选不在正则表达式

var re = /^[[:alnum:]\-_.&\s]+$/; 
var string = 'this contains invalid chars like #@'; 
var valid = string.test(re); 

但现在我想“过滤”一个短语,删除所有不匹配正则表达式的字符?

通常一个使用替换,但如何列出不匹配正则表达式的所有字符?

var validString = string.filter(re); // something similar to this 

我该怎么做?

问候


Wiktor的Stribiżew解决方案正常工作:

regex=/[^a-zA-Z\-_.&\s]+/g; 
 
let s='some bloody-test @rfdsfds'; 
 
s = s.replace(/[^\w\s.&-]+/g, ''); 
 
console.log(s);

拉杰什解决方案:

regex=/^[a-zA-Z\-_.&\s]+$/; 
 
let s='some -test @rfdsfds'; 
 
s=s.split(' ').filter(x=> regex.test(x)); 
 
console.log(s);

+0

查看字符串是保留字 –

+0

JS正则表达式引擎不支持像'[:alnum:]'这样的POSIX字符类(您可以使用'[A-Za-z0-9]'来代替,但只能匹配ASCII字母和数字)。你可以尝试运行's.match(/ [^ \ w \ s。& - ]/g)'来获得不匹配字母,数字,'_','。','&',空白和'-'。 –

+1

'string.split('').filter(x =>!regex.test(x))' – Rajesh

回答

1

JS正则表达式引擎不支持像[:alnum:] POSIX字符类的所有字符不是字母数字,或-_.&移动^之一。您可以改用[A-Za-z0-9],但只能匹配ASCII字母和数字。

您当前的正则表达式匹配包含允许的字符的整个字符串,并且不能用于返回与[^a-zA-Z0-9_.&\s-]不匹配的字符。

可在除去不需要的字符与

var s = 'this contains invalid chars like #@'; 
 
var res = s.replace(/[^\w\s.&-]+/g, ''); 
 
var notallowedchars = s.match(/[^\w\s.&-]+/g); 
 
console.log(res); 
 
console.log(notallowedchars);

/[^\w\s.&-]+/g图案多次出现(由于/g)中的任何一个或多个(由于+)字符比字字符其他匹配(数字,字母,_,与\w匹配),空格(\s),.,&-

+0

为什么你需要'[] +'如果它是全局替换? – Justinas

+0

@Justinas一次去除匹配的字符条纹。这意味着内部正则表达式引擎进行的替换更少。 –

+0

那么简单替换(如果速度更快),速度有多快? – Justinas

0

要匹配内部组[]

var str = 'asd.=!_#$%^&*()564'; 
 

 
console.log(
 
    str.match(/[^a-z0-9\-_.&\s]/gi), 
 
    str.replace(/[^a-z0-9\-_.&\s]/gi, '') 
 
);

相关问题