求几个JS正则表达式

yaotomo 2018-12-26 04:27:20
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." ]
...全文
930 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
teagueli 2020-07-20
  • 打赏
  • 举报
回复
字符串中间的var.不去
  • 打赏
  • 举报
回复
引用 16 楼 yaotomo 的回复:
Test test var. j. ex. 应匹配Test test 后面带点的都不要,现在的结果是Test test var. j.


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]+\.)+$/,'');
}
  • 打赏
  • 举报
回复
引用 15 楼 yaotomo 的回复:
[quote=引用 14 楼 老鼠拧刀满街找猫 的回复:]
[quote=引用 13 楼 yaotomo 的回复:]
我看到了,已经去掉了ex和括号里的内容

et如果也不需要的话,你就把[xX]改为[xXtT]就可以了[/quote]

还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
比如输入Cirsium,现在的结果是不匹配的[/quote]

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(' ');
}
  • 打赏
  • 举报
回复
引用 16 楼 yaotomo 的回复:
Test test var. j. ex. 应匹配Test test 后面带点的都不要,现在的结果是Test test var. j.

挤牙膏,让别人来解决吧
雨夜汁汁 2018-12-28
  • 打赏
  • 举报
回复
把老师逼疯了,脑细胞都死了好多。
  • 打赏
  • 举报
回复
第五个:

function filterWord(text){
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(' ');
}
yaotomo 2018-12-27
  • 打赏
  • 举报
回复
Test test var. j. ex. 应匹配Test test 后面带点的都不要,现在的结果是Test test var. j.
yaotomo 2018-12-27
  • 打赏
  • 举报
回复
引用 14 楼 老鼠拧刀满街找猫 的回复:
[quote=引用 13 楼 yaotomo 的回复:] 我看到了,已经去掉了ex和括号里的内容
et如果也不需要的话,你就把[xX]改为[xXtT]就可以了[/quote] 还有一个问题,如果只输入一个单词,大写打头的话,也要匹配 比如输入Cirsium,现在的结果是不匹配的
  • 打赏
  • 举报
回复
引用 13 楼 yaotomo 的回复:
我看到了,已经去掉了ex和括号里的内容
et如果也不需要的话,你就把[xX]改为[xXtT]就可以了
ssson 2018-12-27
  • 打赏
  • 举报
回复
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" 不知道对不对.
ssson 2018-12-27
  • 打赏
  • 举报
回复
1. "\\b[A-Z][a-z]*\\b" 2. "\\w*\\.\\B" 3. "\\B\\([a-zA-z-]*\\)\\B" 4. 题目都看了好几遍,有点绕,再研究一下.
yaotomo 2018-12-27
  • 打赏
  • 举报
回复
我看到了,已经去掉了ex和括号里的内容
yaotomo 2018-12-27
  • 打赏
  • 举报
回复
引用 11 楼 老鼠拧刀满街找猫 的回复:
第五个:

function filterWord(text){
	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 请老师再帮忙看一下
adhuan 2018-12-27
  • 打赏
  • 举报
回复
好久没碰这些代码了,很好
庖丁解鸭 2018-12-27
  • 打赏
  • 举报
回复
alert("aSaa r5as Aesa (Asw) sss sAA Yaa SaT".match(/(\s|^)[A-Z][a-z]+(?=\s|$)/g));

alert("aaa bbb ccc. ddd ee. fff. rrr t.tt".match(/(\s|^)[a-z]+\.(?=\s|$)/ig));

alert("aaa bbb ccc (ddd) eee fff r(rr)aa ttt".match(/(\s|^)\([a-z]+\)(?=\s|$)/ig));

var str4 = "wes Aes (sss) ttt ddd vs. Sws rrr yts.";
还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
比如输入Cirsium,现在的结果是不匹配的
yaotomo 2018-12-26
  • 打赏
  • 举报
回复
引用 9 楼 老鼠拧刀满街找猫 的回复:
如果匹配项的结尾以var.或其他以.结尾的单词,要将其去掉 既然有上面这个限制了,为什么步骤里面还有包含这些字符
最后得到的结果字符串,结尾是var.(或其他英文字符加点)的,要去掉 字符串中间的var.不去
  • 打赏
  • 举报
回复
如果匹配项的结尾以var.或其他以.结尾的单词,要将其去掉
既然有上面这个限制了,为什么步骤里面还有包含这些字符
yaotomo 2018-12-26
  • 打赏
  • 举报
回复
对了,5#的规则还有一条,匹配结果中不能有单词ex
yaotomo 2018-12-26
  • 打赏
  • 举报
回复
引用 6 楼 天际的海浪 的回复:
第四个 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)));
天际的海浪 2018-12-26
  • 打赏
  • 举报
回复
第四个 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)));
加载更多回复(5)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧