找到第一次出现的正则表达式字符集

时间:2013-01-11 02:53:56

标签: javascript regex character

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

e.g。我有一个字符串如下(在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(长方法)?

2 个答案:

答案 0 :(得分:0)

使用search方法:

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

请注意,如果该方法与您提供的正则表达式不匹配,则返回-1(此方法类似于indexOf

答案 1 :(得分:0)

要仅获得一次出现,请使正则表达式非全局。

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

var singleChars = wrongChar.sort().reduce(function(res, x) {
    if (x != res[res.length-1])
         res.push(x);
    return res;
}, []);