我如何获得正好在另一个正则表达式组之后的单词(a-z,A-Z,0-9)的正则表达式?例如,
AAFS142 美国文学3我不希望这个被阅读!
AAFS209 美国音乐3我不希望这个被阅读
我有[A-Z] {4} \ d {3} \ b作为粗体部分。现在,我如何能够严格按照美国文学和美国音乐的正则表达方式制作正则表达式呢?
这是正则表达式应该捕获的内容(粗体)。
AAFS142 美国文学 3我不希望这个被阅读!
AAFS209 美国音乐 3我不希望这个被阅读
答案 0 :(得分:0)
解决JS缺乏外观的一种方法是使用非捕获(?: )
和捕获组()
。非捕获组被匹配但不被记住,并且存储捕获组。
与正则表达式一样,以下内容有点密集,但您可以看到有三组括号 - 非捕获,捕获,然后是非捕获:
let regexString = /(?:[A-Z]{4}[\d]{3}\s)([A-za-z0-9 ]+)(?:\s\d)/g
第一个未捕获的群组(?:[A-Z]{4}[\d]{3}\s)
匹配,但不记得课程字母数字代码。第二个([A-za-z0-9 ]+)
在A-Za-z0-9
中至少匹配一次+
个字符()
,即标题。最后一个告诉它停止匹配空间+' 3'与(?:\s\d)
。
捕获组和javascript的第二个问题是它们仅在您使用regexString.exec()
时返回,而不是在您使用.match()
时返回。 .exec()
返回一个数组,匹配的文本为第0个(不是这里需要的,因为它包含非捕获组),然后后续索引是捕获组。
let match1 = x.exec('AAFS209 American Music 3')[1]
= 'American Music'
。
let match2 = x.exec('AAFS241 3D American Musical Theatre 3')[1]
= '3D American Musical Theatre'
。 (不确定这是否是一门课程,更不用说一件事了,但是人们可以希望。另外,想让正则表达式使用标题中的数字)。