Javascript不支持积极的lookbehind

时间:2009-08-13 15:37:00

标签: javascript .net regex lookbehind

我在.Net

中有以下正则表达式
(?<=Visitors.{0,100}?"value">)[0-9,]+(?=</div>)

以及以下文字

<div class="text">Visitors</div> <div class="value">14,000,000</div>
<div class="text">VisitorsFromItaly</div> <div class="value">15,200</div>

我在正则表达式中指定“Visitors”或“VisitorsFromItaly”,我得到具体访问者数量的数字。

我想在javascript中执行此操作,但不使用任何.replace方法。我只需要一个简单的javascript正则表达式。我是javascript正则表达式的新手,所以我不知道如何转换它。它说javascript不支持lookbehind,这就是让我的.Net正则表达式工作的东西。

任何帮助将不胜感激。非常感谢提前!!!

3 个答案:

答案 0 :(得分:2)

我不确定我是否理解你......你真的需要一个后视断言吗?

你能不能匹配以下内容?

myRegex = /Visitors.{0,100}"value">([0-9,]+)/; // or with /g modifier on the end?
myMatches = myRegex.exec(stringToMatch);

myMatches [0]包含整个匹配的字符串。 myMatches [1]和更高版本将包含第一个,第二个等捕获组,在正则表达式中用括号表示。在这种情况下,myMatches [1]包含数字。

由于您似乎不需要在数字之前匹配任何其他内容(除了访问者等),我认为您根本不需要一个lookbehind断言。

答案 1 :(得分:1)

试一试:

var regex = /visitors<\/div>\s?<div class="value">([\d,]+)/i;

var input = '<div class="text">Visitors</div> <div class="value">14,000,000</div><div class="text">VisitorsFromItaly</div> <div class="value">15,200</div>
';

if(regex.test(input)) { 
  var match = input.match(regex); 
  alert(match); 
} else { 
  alert("No matches found!"); 
}

答案 2 :(得分:0)

您是将这些数据作为字符串获取的吗?或者您是否可以访问DOM对象(例如AJAX响应)?

如果您可以访问后者,我不会打扰正则表达式。