Javascript 用于检索特定文本的正则表达式
我有很多带有文本的页面,我必须检索特定的值。它不必100%准确,但我也不希望有太多无效值。我要查找的值可以是文本块中的任意位置。我会将提取的值与包含所有有效值的基线进行匹配,以清理数据,但我当前的正则表达式要么提取所有单词,要么什么都不用 我目前正在将文本拆分为单词,并将其与正则表达式匹配,但这会检索几乎所有单词。此外,最小字符数为2,最大字符数为37。我在Brio Hyperion的javascript中使用了这个Javascript 用于检索特定文本的正则表达式,javascript,regex,Javascript,Regex,我有很多带有文本的页面,我必须检索特定的值。它不必100%准确,但我也不希望有太多无效值。我要查找的值可以是文本块中的任意位置。我会将提取的值与包含所有有效值的基线进行匹配,以清理数据,但我当前的正则表达式要么提取所有单词,要么什么都不用 我目前正在将文本拆分为单词,并将其与正则表达式匹配,但这会检索几乎所有单词。此外,最小字符数为2,最大字符数为37。我在Brio Hyperion的javascript中使用了这个 /^\S[A-Z0-9A-Z]{2,37}\S*$/ 我应该使用什么正则表达
/^\S[A-Z0-9A-Z]{2,37}\S*$/
我应该使用什么正则表达式来检索这些值
AEDDBO0023
AED02GS2330
AEBDG0233
GSOOG2345
INCG00522133
AESBOFGL2321
GSCO231145
示例文本:
随机文本不重要:随机文本不重要,随机文本不重要
重要::随机文本不重要随机文本不重要随机
文本不重要随机文本不重要文本不重要
重要文本不重要随机文本不重要
仓库名称:AEDDBO0023随机文本不重要
重要的
AED02GS2330随机文本不重要随机文本不重要随机文本不重要“随机文本不重要”
文本不重要文本不重要文本不重要文本不重要
重要文本不重要随机文本不重要
以下项目中的文本不重要:
AEBDG0233 GSOOG2345 INCG00522133 AESBOGL2321
随机文本不重要文本不重要GSCO231145重要文本不重要文本不重要文本
不重要的文本不重要的文本不重要的文本不重要的文本
文本不重要文本不重要文本不重要文本不重要
重要文本不重要
从OP的评论中添加:
{
var textBlock = ActiveDocument.Sections["Results"].Columns["Detailed Decription"].GetCell(j); // Split found host names in rows
try {
linesArray = IncDescription.toUpperCase().split ('\n');
} catch (e) {
Application.Alert(e.toString());
}
for (i = 0; i< linesArray.length; i++) { // match found strings to the hosts regular expression
splitArray = linesArray [i].split(' ');
for (k=0; k <splitArray.length; k++) {
if ( splitArray [k].match (/[a-zA-Z]{2,37}*[0-9]{1,}/g) !== null) {
try {}
{
var textBlock=ActiveDocument.Sections[“Results”].Columns[“Detailed description”].GetCell(j);//拆分在行中找到主机名
试试{
linesArray=IncDescription.toUpperCase().split('\n');
}捕获(e){
Application.Alert(例如toString());
}
对于(i=0;i 对于(k=0;k,我将使用如下内容:
/\b[A-Z]{4}[A-Z0-9]{1,32}[0-9]\b/
说明:
\b : word boundary
[A-Z]{4} : 4 letters
[ : begin character class
A-Z : any letter from A to Z
0-9 : any digit
] : end character class
{1,32} : from 1 to 32 times
[0-9] : a digit
\b : word boundary
如果要与unicode兼容,请执行以下操作:
/[^\pL\pN]{4}\pL[\pL\pN]{1,32}\pN[^\pL\pN]/
这应该是一个开始:/[a-zA-Z]{2,37}*[0-9]{1,7}/g
在上面的示例中,文本匹配
["AEDDBO0023", "AED02", "GS2330", "AEBDG0233", "GSOOG2345", "INCG00522133", "AESBOFGL2321", "GSCO231145"]
试一试
/\b[A-Z]{4,}[0-9A-Z]*\d{4,}\b/
我假设字母只能是大写,并且结尾至少有4个数字。中间的东西可以是字母和数字的任意组合
用编辑我可以从OP中理解(这不是很多…一个简单的
\b[A-Z][A-Z0-9]*[0-9]\b
看到了吗
\b
是单词边界
只需从大写字母开始,然后是任意数量的大写字母和数字,最后一个字符是数字。这个正则表达式对我来说真的没有太多意义……你不能缩小重要单词的格式吗?例如,数字后面可以有字母吗?还是总是数字在开头+字母在结尾?对不起不用说,它应该总是以字母开头,以数字结尾。我只是想学习如何使用正则表达式,这是有意义的。它没有意义:请详细说明…最大字母/数字数是多少?单词的最大/最小长度是多少?可以是2到37个字符,但少于6个字符的单词通常是例外只匹配长度在6到37个字符之间的字符串是值得的。此外,标准格式是它以最少4个字母开始,以~6个数字结束,但这取决于字符串的长度。感谢您的帮助。您应该更好地解释自己…如果您需要我们的帮助,请尝试找到一些更健壮的模式。因为我他在评论中说,它需要以字母开头,以数字结尾,所以我猜/\b[a-Z][a-Z0-9]{0,35}[0-9]\b/会更精确一些/\b[a-Z0-9]{2,37}\b/检索几乎每个单词,包括标点符号(,:)@问题:谢谢,我在回答之前没有看到评论。@CiprianGrigore:不是,你怎么用?原始海报显然不知道他想要什么,即使你他说它的开头至少有4个字母示例中的一个单词只有3个AED2GS2330
它抓不到AED2GS2330应该{2,37}*
mean?我认为这两个量词在一起没有意义。与fuzzyalej相同的问题,不会得到AED2GS2330,我知道,但当人们不知道如何解释他们的问题时,这不是我的错……我已经添加了很多关于错误的评论,你试图给海报他要求的,而不是他实际需要的,你拒绝了对于那些因为没有按照原始海报的要求来做而实际上能得到所有正确答案的答案,即使你同意他不知道自己想要什么。首先,我不必猜测OP想要什么。他必须告诉我,越详细,我能得到的答案就越好(如果我能)。我必须回答他的问题,而不是回答我认为他在问什么或我认为对他更有利的问题。其次,感谢你的评论!这对大多数单词都有效,但出于某种原因,也检索包含标点符号和空格的单词。单词总是以4个字母开头。@m0skit0要再次阅读他的问题和评论,m最小长度为2个字符。开头的4个字母是标准的,但也可以有较短的。@CiprianGrigore如果您这样使用此正则表达式,它既不匹配标点符号,也不匹配空格。/\b[A-Z][A-Z0-9]*[0-9]\b/g
,也许您应该重新阅读。引用Ciprian:“此外,标准格式是以至少4个字母开头”