我想接受单词和一些特殊字符,所以如果我的正则表达式 不完全匹配,假设我显示错误,
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);
最佳答案
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
), .
, &
and -
.
关于Javascript - 正则表达式 - 如何过滤不属于正则表达式的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771410/