Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在句子中找到一个已定义的长度数字并对其进行分析_Javascript_Html_Regex_Dom - Fatal编程技术网

Javascript 在句子中找到一个已定义的长度数字并对其进行分析

Javascript 在句子中找到一个已定义的长度数字并对其进行分析,javascript,html,regex,dom,Javascript,Html,Regex,Dom,我正在使用javascript从网页上的元素中读取内容,其中包含段落,并在锚定标记中包装“Article Number”。例如: 我们需要更新25223。(或)KB25223需要更新 这里的主要内容是它总是一个5位数的数字,但我不希望它从一个6或7位数的数字中获取5位数。它将被字母、非数字或特殊字符包围。我更喜欢使用regexp语句,但我对修饰符了解不够,无法解决所有问题。这应该正好匹配5位数字,仅此而已: str.match(/\b\d{5}\b/g); 如果您想让它同时捕获前面的字母,如K

我正在使用javascript从网页上的元素中读取内容,其中包含段落,并在锚定标记中包装“Article Number”。例如:

我们需要更新25223。(或)KB25223需要更新


这里的主要内容是它总是一个5位数的数字,但我不希望它从一个6或7位数的数字中获取5位数。它将被字母、非数字或特殊字符包围。我更喜欢使用regexp语句,但我对修饰符了解不够,无法解决所有问题。

这应该正好匹配5位数字,仅此而已:

str.match(/\b\d{5}\b/g);
如果您想让它同时捕获前面的字母,如KB25223,请尝试:

str.match(/(?:^|\D*)(\d{5})(?=\D|$)/g)
然后根据需要移除组的非捕获部分


str
是包含文章编号的字符串

让我们忽略HTML部分,并假设可以使用正则表达式搜索文本。(不要尝试用正则表达式解析HTML!)

假设您有一个可以显示多个数字的文本,并且我们已经有了javascript字符串中的文本,
text

您想要的是这样的:

//文本变量已包含我们的文本
var re=/(?:\D |\b)(\D{5})(?=\D |\b)/g;
var-arr;
while((arr=re.exec(text))!==null){
var项目=arr[1];
console.log('found item'+item);
}
(如果您想了解更多详细信息,我从中窃取了该代码。)

正则表达式的模式部分包含在斜杠中
g
是一个表示“全局”的标志:准备匹配字符串中的所有匹配项

该模式有三个部分。基本部分是
(\d{5})
<代码>\d表示任何数字
\d{5}
表示匹配任意数字五次。括号中的意思是“捕获”,即保存以备将来使用

第一部分,
(?:\D |\b)
,表示匹配任何非数字或任何分词,但不保存它们以供以后使用
\D
是非数字,
\b
是分词,
|
表示“或”,符号
(?:…)
表示将它们组合在一起,但不保存它们。我们需要这两个字符的原因是匹配字符串中数字前面的字符,如
KB12345
这是12345
,但也要匹配字符串中的第一个数字,如
12345

最后一部分,
(?=\D |\b)
,表示匹配任何非数字或任何分词,但甚至不将其作为匹配的一部分。
(?=…)
的意思是向前看,看看它是否在那里。如果您有一个类似于
12345y67890
的字符串,则不需要对其进行计数:
y
必须作为两个数字的单词边界进行计数,因此不要将其作为匹配的一部分

运行一次
re.exec()
将返回如下数组:

['B25223',
'25223',
索引:1,
输入:“KB25223需要更新。”]
arr[0]
包含整个匹配项
arr[1]
返回我们在括号中捕获并保存以供以后使用的内容。(如果我们有更多的捕获参数,
arr[2]
arr[
n
]
索引是匹配从
输入开始的地方(我们正在搜索的文本)
exec()
如果不匹配,则返回
null


exec()
保存索引以开始下一个匹配,这样它就可以在循环中运行。

但是,如果一个数字超过5个字符,它只需要该数字的5位数字,而它应该完全忽略它。@TylerFields:不,它不需要。它只处理5位数字。你试过了吗?“123456”。匹配(/(?:^\D*)(\D{5})(?=\D$)/g)将返回23456。它不应该捕捉到那个6位数的数字。这正是我想要的,非常感谢!