正则表达式 - 选取第n个值

时间:2014-06-05 17:25:45

标签: javascript regex

我试图获得一个正则表达式,在那里我可以选择索引为1的单元格,在表格的索引为3的行中。我不确定如何做到这一点,特别是只挑选那个特定的细胞。我需要假设我不知道行或单元格将包含什么。

该表格为HTML格式。

请有人就此提出一些建议吗?

这必须是普通的javascript RegEx表单,我不能使用jQuery。

2 个答案:

答案 0 :(得分:0)

这匹配每个单元格中的所有文本。我现在正在处理 nth 单元格。 在javascript中不起作用,因为javascript不支持lookbehind。我知道你想在javascript中这样做,但那是不可能的。你不能在没有后卫的情况下做这个正则表达式。

假设表格形式:

<tr>
  <td>Jill</td>
  <td>Smith</td>
  <td>50</td>
</tr>
<tr>
  <td>Eve</td>
  <td>Jackson</td>
  <td>94</td>
</tr>

与每个单元格中的文本匹配的正则表达式是:

(?<=<td>).*?(?=<)

我正在思考这个问题:

(?s)((?<=(<\/td>){cell index}+<td>).*?(?=<.*))

但是这种外观并没有正确解析,至少在Sublime的搜索工具中是这样。

我们可以在lookbehind中的捕获组上放置一个数字来指定单元格编号,然后为行号重复该过程。有什么建议吗?

更多传入。

答案 1 :(得分:0)

我知道这是一个旧线程,但我遇到了同样的问题,这是第一个谷歌搜索结果。

这是我想出的(其中 n 是您要匹配的第 n 个数字单元格):

/(?:<td>(?:(?!<\/td>).)*<\/td>){n-1}<td>(.*?)<\/td>/gi

上面@devon 给出的例子:

<tr>
  <td>Jill</td>
  <td>Smith</td>
  <td>50</td>
</tr>
<tr>
  <td>Eve</td>
  <td>Jackson</td>
  <td>94</td>
</tr>

如果您想匹配第 3 个单元格 (50),您可以使用以下内容:

(?:<td>(?:(?!<\/td>).)*<\/td>){2}<td>(.*?)<\/td>

Example