1,匹配一个字符串(由多个单词组成,可能是一段话)中第一个首字母大写,其他字母为小写的单词
例如"aSaa r5as Aesa (Asw) sss sAA Yaa SaT" 匹配结果为["Aesa","Yaa"]
2,匹配一个字符串(由多个单词或特殊符号组词)中所有最后一个字符为点(.)的单词
例如 "aaa bbb ccc. ddd ee. fff. rrr t.tt" 匹配结果为 ["ccc.","ee.","fff."]
3,匹配一个字符串(由多个单词,其中有些单词带括号)中所有括号中的单词
例如 "aaa bbb ccc (ddd) eee fff r(rr)aa ttt" 匹配结果为"(ddd)"
4,匹配一个字符串(由多个单词或特殊符号组词)中第一个出现的首字母为大写,且其他字母为小写的单词,和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词。
例如 "wes Aes (sss) ttt ddd vs. Sws rrr yts." 匹配结果为["Aes", "ttt", "ddd" ,"vs." ,"rrr","yts." ]
例如"aSaa r5as Aesa (Asw) sss sAA Yaa SaT" 匹配结果为["Aesa","Yaa"]
2,匹配一个字符串(由多个单词或特殊符号组词)中所有最后一个字符为点(.)的单词
例如 "aaa bbb ccc. ddd ee. fff. rrr t.tt" 匹配结果为 ["ccc.","ee.","fff."]
3,匹配一个字符串(由多个单词,其中有些单词带括号)中所有括号中的单词
例如 "aaa bbb ccc (ddd) eee fff r(rr)aa ttt" 匹配结果为"(ddd)"
4,匹配一个字符串(由多个单词或特殊符号组词)中第一个出现的首字母为大写,且其他字母为小写的单词,和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词。
例如 "wes Aes (sss) ttt ddd vs. Sws rrr yts." 匹配结果为["Aes", "ttt", "ddd" ,"vs." ,"rrr","yts." ]
alert([str4.match(/(\s|^)[A-Z][a-z]+(?=\s|$)/)[0]].concat(str4.match(/(\s|^)[a-z\.]+(?=\s|$)/g)));
%\w*\.^
%(\w*)^
第四个不会
谢谢老师。除了最后一个之外都可以了。另外还有一个比较复杂的,老师能帮忙看一下吗?先看匹配得到的结果(1,2,3分别是匹配的步骤)
原字符串:Lilium brownii var. viridulum Baker
结果为
1)Lilium
2)Lilium brownii
3)Lilium brownii var. viridulum原字符串:Clintonia alpina (Trautv. et C. A. Mey.) J. F. Macbr. var. geniculatum W. T. Wang
结果为
1)Clintonia
2)Clintonia alpina
3)Clintonia alpina var. geniculatum原字符串:Cirsium bolocephalum (Rothm.) Holub var. setchwanicum Petr. ex Hand.-Mazz. f. glaucum Ching
结果为
1)Cirsium
2)Cirsium bolocephalum
3)Cirsium bolocephalum var. setchwanicum
4)Cirsium bolocephalum var. setchwanicum f. glaucum规则
第一步:从左到右,匹配第1个大写字母打头的单词(第一个单词肯定大写),作为结果的第一项
第二步:从头开始匹配,在上面获取结果的基础上,获取第一个小写字符打头,且不包含字符左括号(、右括号)、&的单词,并与上面的结果合并为一个单词
第三步:重复第二步
.........:重复第二步
直至整个原字符串匹配完毕另外,如果匹配项的结尾以var.或其他以.结尾的单词,要将其去掉。
alert(["wes Aes (sss) ttt ddd vs. Sws rrr yts.".match(/(\s|^)[A-Z][a-z]+(?=\s|$)/)[0]].concat(RegExp.rightContext.match(/(\s|^)[a-z\.]+(?=\s|$)/g)));
既然有上面这个限制了,为什么步骤里面还有包含这些字符
最后得到的结果字符串,结尾是var.(或其他英文字符加点)的,要去掉
字符串中间的var.不去
let isFirst=true;
let arr=text.split(/\([^()]*\)|\s+/);
return arr.filter(function(item,index){
if(index===arr.length-1){
return /^[a-z]+$/.test(item);
}
if(isFirst){
isFirst=false;
return /^[A-Z][a-z]*$/.test(item);
}
return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
}).join(' ');
}
谢谢老师。
Clintonia alpina (Trautv. et C. A. Mey.) J. F. Macbr. var. geniculatum W. T. Wang
括号里的字符都不能要,et 在结果里是不能有的
另外,结果里不能包含字符串 ex
Cirsium bolocephalum (Rothm.) Holub var. setchwanicum Petr. ex Hand.-Mazz. f. glaucum Ching
结果是
Cirsium bolocephalum var. setchwanicum f. glaucum
请老师再帮忙看一下
比如输入Cirsium,现在的结果是不匹配的
还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
比如输入Cirsium,现在的结果是不匹配的
2. "\\w*\\.\\B"
3. "\\B\\([a-zA-z-]*\\)\\B"
4. 题目都看了好几遍,有点绕,再研究一下.
例如 "wes Aes (sss) ttt ddd vs. Sws rrr yts." 匹配结果为["Aes", "ttt", "ddd" ,"vs." ,"rrr","yts." ]
第一个出现的 (首字母为大写,且其他字母为小写的单词) 那不就是匹配到Aes, Sws是第二个出现的,所以没匹配.
然而,后面一个条件 和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词,那wes不就满足,为啥你的匹配结果没有?
感觉题目是不是有点问题
"[A-Z][a-z]*|[a-z][a-z\\.]*\\s"
不知道对不对.
比如输入Cirsium,现在的结果是不匹配的function filterWord(text){
let isFirst=true;
let arr=text.split(/\([^()]*\)|\s+/);
return arr.filter(function(item,index){
if(isFirst){
isFirst=false;
return /^[A-Z][a-z]*$/.test(item);
}
if(index===arr.length-1){
return /^[a-z]+$/.test(item);
}
return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
}).join(' ');
}
function filterWord(text){
let isFirst=true;
let arr=text.split(/\([^()]*\)|\s+/);
return arr.filter(function(item,index){
if(isFirst){
isFirst=false;
return /^[A-Z][a-z]*$/.test(item);
}
if(index===arr.length-1){
return /^(?![eE][xX]$)[a-z]+$/.test(item);
}
return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
}).join(' ').replace(/(?:\s[a-z]+\.)+$/,'');
}