如果字符串仅包含唯一字符,则使用JavaScript进行正则表达式测试

时间:2016-09-17 06:55:00

标签: javascript regex

字符串仅包含[A-Za-z0-9]个字符。我需要知道测试的字符串是否包含至少一个重复字符。

以下内容应返回false:

abc1
abc

以下内容应返回true:

abc11
1abc1
aabc1

ABCA

6 个答案:

答案 0 :(得分:9)

将正则表达式与positive look aheadcapturing group一起使用。

/(?=^[A-Za-z0-9]+$)(.)+.*\1.*/

Regex explanation here

Regular expression visualization

答案 1 :(得分:2)

尝试使用此正则表达式检查字符串

中的字符是否唯一
var str = 'aabbcc';
var isRepeat = (/([a-zA-Z0-9]).*?\1/).test(str); //Checks for repeated character in string

答案 2 :(得分:1)

可以完成:

^.*?(\w)\1.*?$

请参阅a demo on regex101.com(实际上, ll 也是因为匹配)。

<小时/>

说明:

如果您不介意角色类[A-Za-z0-9]也可以包含_\w[A-Za-z0-9_]的快捷方式。然后,整个表达式绑定到行/字符串的开头(^)和结束($)。最后但并非最不重要的是,懒惰.*?匹配前后任何内容,(\w)\1至少有一个重复字符。

如果您 关注_,请将其保留为[A-Za-z0-9]

^.*?([A-Za-z0-9])\1.*?$

提示:

想一想,我误解了你的问题。根据您的问题的要求,此方法会匹配aabcabbc但不匹配1abc1等字词。正如@Pranav所提出的那样,使用积极的前瞻。虽然这没有回答有人可能对这个解决方案感兴趣的问题所以我倾向于留下答案。

答案 3 :(得分:1)

像@Jan一样,我没有密切关注问题。所以@Pranav的答案正在运行并被接受,但它有多个不必要的贪婪点。我会把它减少到:

/(?=^[a-z0-9]+$)(.)+?.*\1/im

<强> Live demo

答案 4 :(得分:1)

如果您发现字符集限制过于限制,请使用:

function isNotUnique(inputString) {
    return !(inputString === [...new Set(inputString)].join(''));
}

它不使用正则表达式,但是,处理大部分/全部?字符因为它依赖Set来强制执行唯一性。 Unicode示例:

let inputs = ['abc1', 'abc', 'abc11', '1abc1', 'aabc1', '☃☃', '☃', '☃abc', '(ฺ◣д◢)ฺ', '(ฺ◣д◢)'];
inputs.forEach(v => console.log(v + ': ' + isNotUnique(v)));

输出:

abc1: false
abc: false
abc11: true
1abc1: true
aabc1: true
☃☃: true
☃: false
☃abc: false
(ฺ◣д◢)ฺ: true
(ฺ◣д◢): false

答案 5 :(得分:0)

如果您已经知道[A-Za-z0-9],则只需.*?(.).*?\1.*

仅检查是否匹配(.).*?\1