Javascript - 正则表达式 - 如何过滤不属于正则表达式的字符

标签 javascript regex

我想接受单词和一些特殊字符,所以如果我的正则表达式 不完全匹配,假设我显示错误,

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/

相关文章:

javascript - TypeScript generic 编写装饰器时出错?

javascript - 如何获取 javascript 对象引用或引用计数?

javascript - 为什么原生 JS FILTER 函数的输出会有所不同

正则表达式:确定两个正则表达式是否可以匹配同一个输入?

python - 在Python中使用re包将句子分成子句

javascript - 更新嵌套对象数组

javascript - 如何限制应用于 <body> 的单击事件在正文中的 jquery 数据表上执行

r - 使用空格和大写字母分割字符串

Mysql REGEXP 用户名

仅用于部分字符串匹配的 Javascript 正则表达式