正则表达式从JavaScript中查找id

时间:2015-02-03 15:57:05

标签: javascript python regex

我有一些字符串格式的JavaScript代码。目标就是这样一个字符串:

productPage.loadProductData("138674", "initial", "1");

如何提取'138674'?

我正在使用这一行:

from re import search as re_search, sub as re_sub, compile as re_compile
print re_search(r'productPage.loadProductData("?P<pid>\d+","?P<x>\w+","?P<n>\d+");', open_link).groupdict()["pid"]

3 个答案:

答案 0 :(得分:1)

在Python (?P<name>regex)中称为命名捕获组。您忘记了命名捕获组中的左右括号。此外,您还需要在正则表达式中转义(以匹配文字(符号。

>>> s = 'productPage.loadProductData("138674","initial","1");'
>>> print re.search(r'productPage.loadProductData\("(?P<pid>\d+)","(?P<x>\w+)","(?P<n>\d+)"\);', s).group("pid")
138674

OR

>>> print re.search(r'productPage.loadProductData\("(?P<pid>\d+)","(?P<x>\w+)","(?P<n>\d+)"\);', s).groupdict()["pid"]
138674

答案 1 :(得分:0)

除了基于正则表达式的方法,您可以使用slimit JavaScript parser

来解决它
from slimit.ast import String
from slimit.parser import Parser
from slimit.visitors import nodevisitor

data = 'productPage.loadProductData("138674","initial","1");'

parser = Parser()
tree = parser.parse(data)
print next(node.value for node in nodevisitor.visit(tree) if isinstance(node, String))

这会从String变量的JavaScript代码中输出第一个data节点。

答案 2 :(得分:0)

为什么要对代码进行正则表达式,而不是使用专门的库来解析代码 - 例如Esprima

Esprima解析代码并以JSON格式输出,以便您现在可以提取函数的名称,传递给它的变量等。