2017-10-16 102 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, '') 
 
);

相關問題