0

我在网上找到了许多正则表达式匹配第一次出现的字符串、某个字符、一个单词等的解决方案,但我还没有找到匹配第一次出现的一组字符的解决方案(或者在我的情况下,不匹配一组字符)。

例如,我有一个如下字符串(在 javascript 中):

var testString = '~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`~!@#$%^&*()_+|}{POIUYTREWQ":?><asdfghjklm,./;[]\=-0987654321`'

如您所见,testString 中有很多很多很多奇怪的字符。

我提出了一个正则表达式匹配来向我展示哪些是违规字符,如下所示:

var regTest = /[^A-Za-z0-9.,?()@\[\]\-\/ ]/g;
var wrongChar = testString.match(regTest);

现在,我的问题是,即使 wrongChar 很好地返回了一个不匹配字符的数组,它也会给我每次出现的字符,如下所示:

~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`,~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`,~,!,#,$,%,^,&,*,_,+,|,},{,",:,>,<,;,\,=,`

有没有办法让我快速地只第一次出现每个不需要的字符(例如更改我的正则表达式),或者我是否必须创建 2 个数组来继续测试一个字符是否已经保存在 wrongChar(长方法)?

4

1 回答 1

0

要仅出现一次,请将正则表达式设为非全局。

要仅获取每个字符一次,只需从wrongChar结果数组中删除重复项:

var singleChars = wrongChar.sort().reduce(function(res, x) {
    if (x != res[res.length-1])
         res.push(x);
    return res;
}, []);
于 2013-01-11T03:00:19.210 回答