我正在尝试创建正则表达式以查找包含最多三个不同字符的所有输入.输入有多长并不重要.
案例:
我已经完成了正则表达式以找到四个或更多不同字符的输入,但现在我需要它以相反的方式...
(.).*(?\1)(.).*(?\1)(?\2)(.).*(?\1)(?\2)(?\3)(.)
Run Code Online (Sandbox Code Playgroud)
主要问题是:如何查看不同字符的数量?
以下将匹配最多包含三个不同非空格字符的字符串
^\s*(\S)?(?:\s|\1)*(\S)?(?:\s|\1|\2)*(\S)?(?:\s|\1|\2|\3)*$
Run Code Online (Sandbox Code Playgroud)
(\S)匹配一个非空格字符并捕获它,以便稍后可以使用反向引用(例如 )在正则表达式中引用它\1。使用中?的(\S)?,以便字符串可以包含零个、一个、两种或三种类型的非空格字符。
使?:一组非捕获。
正则表达式的第一部分捕获最多三个不同的非空格字符\1, \2, \3, 然后(?:\s|\1|\2|\3)*确保只有这些字符或空格\s可以出现在字符串末尾之前$。
在 Javascript 中,一种方法是“使用正则表达式”计算字符串中不同非空格字符的数量:
var str = 'ABC ABC';
var chars = '';
str.replace( /\S/g, function ( m ) {
if ( chars.indexOf(m) == -1 ) chars += m;
});
chars.length; // 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |