Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式:如何仅匹配给定字符?_Javascript_Regex - Fatal编程技术网

Javascript正则表达式:如何仅匹配给定字符?

Javascript正则表达式:如何仅匹配给定字符?,javascript,regex,Javascript,Regex,我正在尝试使用类似于/[computer]{3,8}/的正则表达式来获取任何只包含计算机中3到8个字母的单词。该正则表达式将捕获包含[计算机]中任何字母的所有单词。我一直在看正则表达式的例子,但我不太明白 如何修改此正则表达式以捕获仅包含计算机中字母的单词(长度为3到8) 我希望使用基本单词“computer”匹配的示例如下: 放, 拖把,切割,术语,可爱,妈妈,推杆,哑巴 (最终结果是让它只使用每个字母一次,但我可以不使用该功能)在正则表达式边缘匹配单词边界 /\b[computer]{3,8

我正在尝试使用类似于
/[computer]{3,8}/
的正则表达式来获取任何只包含计算机中3到8个字母的单词。该正则表达式将捕获包含[计算机]中任何字母的所有单词。我一直在看正则表达式的例子,但我不太明白

如何修改此正则表达式以捕获仅包含计算机中字母的单词(长度为3到8)

我希望使用基本单词“computer”匹配的示例如下:

放, 拖把,切割,术语,可爱,妈妈,推杆,哑巴


(最终结果是让它只使用每个字母一次,但我可以不使用该功能)

在正则表达式边缘匹配单词边界

/\b[computer]{3,8}\b/

问题的第二部分使用了大量代码- 一次过可能会更简单,但更有趣的是,创建一个方法来搜索任何文本字符串,查找您输入的任何单词的成分

function wordsfrom(s1, str){
    var i, tem, temp, s1= s1.toLowerCase(),
    rx= RegExp('\\b(['+s1+']{3,'+s1.length+'})\\b','gi'),
    M= str.match(rx) || [];

    return M.testEach(function(itm){
        tem= itm.toLowerCase().split('');
        temp= s1.split('');
        while(tem.length){
            ax= temp.indexAt(tem.pop());
            if(ax== -1) return false;
            temp.splice(ax, 1);
        }
        return true;
    });
}



var s1= 'cut pat, rope, computers, putt, compote, come, put, mop, dog, comute';
alert(wordsfrom('computer', s1));

/*  returned value: (Array)
cut,rope,come,put,mop,comute
*/
这使用了两种通用数组方法,对IE有用,在其他方法中也可以使用

替换为用于indexOf和filter方法的任何内容

Array.prototype.testEach= function(fun){
    var A= [], i= 0, itm, L= this.length;
    if(typeof fun== "function"){
        while(i < L){
            itm= this[i];
            if(fun(itm, i++)) A[A.length]= itm;
        }
    }
    return A;
}
Array.prototype.indexAt= function(what){
    var L= this.length;
    while(L) if(this[--L]=== what) return L;
    return -1;
}
Array.prototype.testEach=函数(fun){
变量A=[],i=0,itm,L=this.length;
如果(乐趣类型=“功能”){
而(i
我想这就是你想要的:

<script>

var s = "pu put puut mutep computer comp coomp retupmoc compux xputer";
s = s.replace(/\b((?!\w*(\w)\w*\2)[computer]{3,8})\b/g, "[$1]");
document.write(s);

</script>
所以它匹配的是
[computer]{3,8}
,但没有重复字符的整个单词

使用此模式上的负前瞻完成无重复匹配:

\w*(\w)\w*\2
此模式尝试查找包含重复字符的单词。它通过捕获一个字符,然后查看它是否在以后再次出现,允许
\w*
介于两者之间

另见
相关问题
    • “ABCDEFG”

我不知道Dojo,但您描述的正则表达式将匹配“计算机”中的一串字母,长度从3到8个字母。像“乌尔”。很明显,您对结果不满意,但不清楚您想要什么。任何和“计算机”中字母组成的字符串(长度为3-8)的匹配实际上就是我想要的。我得到的是10个匹配的单词“Adenauer”…你是说“computer”中的每个字母在一个正确匹配的单词中只能使用一次吗?如果是这样,regex就不是解决这个问题的方法。这是可能的,但很残酷。你能展示一些应该和不应该匹配的字符串的例子吗?这正是我需要的。谢谢
\w*(\w)\w*\2