python2.7 - python 正则前瞻 后瞻 无法匹配到正确的内容

 nct6778550 发布于 2022-10-25 17:08

使用 python 来测试正则前瞻 后瞻,但是怎么都没有像官网说的那样。

题目

解析 html onclick=""里面的字符串,返回调用的函数名和参数list

表达式

根据文档写的表达式: https://docs.python.org/2/lib...
(?<=\s*javascript\s*\:\s*)([\w]+)\((.+)\)(?=\s*;.*)

代码
def parse_js_func(txt):
    """
    从 onclick 的值中解析各种绑定时间
    返回 函数名 和 参数,只支持单个函数绑定的JS listener
    :param txt:
    :return:
    """
    func = None
    param = None
    if txt and 2 <= len(txt) <= 200:
        pattern = '(?<=\s*javascript\s*\:\s*)([\w]+)\((.+)\)(?=\s*;.*)'
        # pattern = '(\s*javascript\s*\:\s*)?([\w]+)\((.+)\)(\s*;.*)?'        
        m = re.match(ur'' + pattern, u'' + txt, re.I | re.M)
        if m and m.lastindex >= 3:
            func = m.group(2)
            txt2 = m.group(3)
            if len(txt2.split(',')) > 1:
                param = [str(x).strip('\'"') for x in txt2.split(',')]
            else:
                param = str(txt2).strip('\'"')
    return func, param
用例
  1. onclick="javascript:func('a',1,2,3)" 返回 ['func',['a',1,2,3]]

  2. onclick="func(11111)"应该返回 ['func',11111]

1 个回答
  • 你那个正则是你自己写的吧? 向后查找要求要明确pattern的长度, 试下这个正则能不能满足要求: (1+)((['"w,]+)?)


    1. "': ↩
    2022-10-26 23:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有