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”
\w*(\w)\w*\2