让我们忽略 HTML 部分,并假设您的文本可以使用正则表达式进行搜索。 (不要尝试使用正则表达式解析 HTML!)
假设您有一个可以出现多个数字的文本,并且我们已经在 javascript 字符串 text 中拥有该文本。
你想要的看起来像这样:
// text variable already contains our text
var re = /(?:\D|\b)(\d{5})(?=\D|\b)/g;
var arr;
while ((arr = re.exec(text)) !== null) {
var item = arr[1];
console.log('found item ' + item);
}
(我从MDN 窃取了该代码,如果您想查看有关它的更多详细信息。)
正则表达式的模式部分包含在/ / 斜杠中。 g 是一个表示“全局”的标志:准备匹配字符串中的所有匹配项。
该模式由三个部分组成。基本部分是(\d{5})。 \d 表示任意数字; \d{5} 表示匹配任意数字五次。括号表示“捕获”,即保存以备后用。
第一部分,(?:\D|\b),表示匹配任何非数字或任何分词,但不要保存它们以备后用。 \D 是非数字,\b 是分词,| 表示“或”,符号(?: ... ) 表示将它们组合在一起,但不要保存它们。我们需要这两个的原因是匹配字符串中数字之前的字符,如KB12345 或this is 12345,但如果数字是字符串中的第一个,也匹配,如12345 rocks!。
最后一部分(?=\D|\b) 表示匹配任何非数字或任何分词,但甚至不将其算作匹配的一部分。 (?= ... ) 表示向前看,看看它是否在那里。如果你有一个像12345y67890 这样的字符串,你不需要计算它:y 必须算作两个数字的单词边界,所以不要将它作为匹配的一部分。
运行re.exec() 一次会返回一个这样的数组:
[ 'B25223',
'25223',
index: 1,
input: 'KB25223 needs to be updated.' ]
arr[0] 包含整个匹配项。 arr[1] 返回我们在括号中捕获并保存以备后用的内容。 (如果我们有更多捕获括号,arr[2] 到 arr[n] 中会有值。)index 是匹配在 input 中开始的位置(我们的文本'正在搜索)。如果没有匹配,exec() 返回 null。
exec() 保存索引以开始下一个匹配,因此可以循环运行。