问答详情
源自:1-4 综合实例:SVG编辑器

感觉源代码SVGEditor.html中有bug

老师,你这节课的源代码中,这条语句的正则表达式写得有点问题吧。var match = /translate\((\d+),(\d+)\)\srotate\((\d+)\)\sscale\((\d+)\)/.exec(transString);因为这里属性中的数值有可能是正数、负数、小数啊,但是这个表达式只能匹配都是正整数的情况吧,我觉得应该改成这样:var match = /translate\((-?\d+),(-?\d+)\)\srotate\((-?\d+)\)\sscale\((-?\d+\.\d{0,2})\)/.exec(transString);

提问者:中国鹰派 2015-08-11 22:10

个回答

  • vivian_zhang
    2020-08-19 16:55:52

    另外, createHandle 函数中,设置range值需要放在后面。

    handle.setAttribute('min', 0); 
    handle.setAttribute('max', 800);
    handle.setAttribute('value', value);  // 放在后面

    后面。 不然选中时,#shape-attrs 里的range值没有更新。

  • vivian_zhang
    2020-08-19 16:52:16

    改成这样更合适些吧。scale为1时,是整数。

    var match = /translate\((-?\d+),(-?\d+)\)\srotate\((-?\d+)\)\sscale\((-?\d(\.\d+)?)\)/.exec(transString);


  • 许愿瓶啊
    2018-03-18 21:44:50

    我测试过了,你说的是正确的,不过还有个问题,匹配的时候,属性之间是没有空格隔开的

    正确的写法:var match = /translate\((-?\d+),(-?\d+)\)rotate\((-?\d+)\)scale\((-?\d+\.\d{0,2})\)/.exec(transString);

  • 嗨小二
    2015-12-19 23:10:35

    好像是