使用正则表达式过滤掉第二组数字

时间:2013-06-21 13:24:35

标签: javascript regex

在我的HTML标记中,将会有一系列具有以下命名方案的元素:

name="[].timeEntries[].Time"

在两组括号中,将有至少一个可能两位数的数字。我需要过滤掉第二组数字。

免责声明:这是我第一次了解正则表达式。

到目前为止,这是我的模式:

var re = /\[\d{1,2}\].timeEntries\[(\d{1,2})\]\.Time/;
  1. 我不确定是否应该使用*或+字符来表示两个可能的数字。
  2. 替换()是正确的方法吗?
  3. 我是否需要逃离这个时期'。' ?
  4. 您可以提供任何其他提示。
  5. 例如,如果我遇到带

    的元素
    name="[10].timeEntries[9].Time"
    

    我想把9放入变量。

2 个答案:

答案 0 :(得分:4)

  

我不确定是否应该使用*或+字符来表示两个可能的数字。

不要使用{1,2}

\[\d{1,2}\]\.timeEntries\[(\d{1,2})\]\.Time

Example

这明确表示1位或2位数。

另外,是的,你应该逃避.

你可以像这样使用它:

var re = /\[\d{1,2}\]\.timeEntries\[(\d{1,2})\]\.Time/;

var myNumber = "[0].timeEntries[47].Time".match(re)[1];

现在myNumber将包含47

最后一句警告,myNumber包含string“47”。如果您打算将其用作数字,则需要使用parseInt或使用+

var myNumber = +"[0].timeEntries[47].Time".match(re)[1];

答案 1 :(得分:0)

你非常接近。

有很多方法可以做到这一点 - 特别是取决于该文本格式的稳固程度。

您可以使用替换:

var re = /\[\d+\]\.timeEntries\[([\d]+)\]\.Time/;
var digits = element_name.replace(re, '$1');

如果您知道它始终是第二组数字,则可以使用match

您还可以使用indexOf和/或split以及其他一些字符串函数...在某些情况下可以更快(但我认为在您的情况下,正则表达式很好,可能更容易遵循)