我正在尝试使用像/[computer]{3,8}/
这样的正则表达式来获取包含仅计算机中字母长度为3到8个字母的单词。相反,该正则表达式捕获包含[计算机]中任何字母的所有单词。我一直在看正则表达式的例子,但我无法弄明白......
如何修改此正则表达式以捕获仅包含计算机中字母的单词(长度为3到8)?
我希望使用基本单词“computer”匹配的一些示例是:
放, 拖把,剪,术语,可爱,妈妈,推杆,静音
(最终结果是让它只使用一次,但我可以管理没有该功能)
答案 0 :(得分:2)
匹配正则表达式边缘的单词边界。
/\b[computer]{3,8}\b/
答案 1 :(得分:0)
你问题的第二部分最后使用了很多代码 - 在一个单一的情况下它会更简单,但是制作一个方法来搜索任何单词文本以获取任何单词的组成部分会更加有趣。
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
*/
这使用了几个通用的Array方法,对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;
}
答案 2 :(得分:0)
我觉得这样的事情就是你想要的:
<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>
打印:
pu [put] puut [mutep] [computer] [comp] coomp [retupmoc] compux xputer
因此它匹配[computer]{3,8}
的整个单词,但没有重复的字符。
在此模式上使用负向前瞻完成无重复匹配:
\w*(\w)\w*\2
此模式尝试查找包含重复字符的单词。它通过捕获一个角色,然后查看它是否稍后再次出现,允许\w*
介于两者之间来实现此目的。
"ABCDEFG"