1

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

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

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

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

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

var re = /\[\d{1,2}\].timeEntries\[(\d{1,2})\]\.Time/;
  1. 我不确定是否应该使用 * 或 + 字符来表示两个可能的数字。
  2. replace() 是正确的方法吗?
  3. 我是否需要逃避句号'。?
  4. 感谢您提供的任何其他提示。

例如,如果我遇到一个元素

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

我只想将 9 放入一个变量中。

4

2 回答 2

4

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

都不行,用{1,2}

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

例子

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

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

你可以像这样使用它:

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];
于 2013-06-21T13:31:42.660 回答
0

你很接近。

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

您可以使用替换:

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

如果你知道它总是第二组数字,你可以使用match

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

于 2013-06-21T13:40:33.913 回答