1

我有 SVG 字符串,我需要提取它的两个属性:宽度和高度。

我不能使用一些 XML 解析器,因为我将它与 Titanium Studio 框架一起使用,所以我在任何地方都没有 DOM。

SVG 看起来像这样:

<svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" version="1.1" width="768" height="1005" space="preserve">
    LOT OF DATA HERE... <></> etc
</svg>

我从这样的事情开始:

var width = svgString.match( /^<svg.\width.=.(.*)$>/gm );

现在是凌晨 4 点,我的大脑无法正常工作。如果有人可以提供帮助,那就太好了!谢谢。

4

4 回答 4

4

假设 jmar777 的代码有效,我将使用不同的、更保守的正则表达式,它允许可选空格、可选引号并确认值来自 svg 标签本身(如果 svg 标签中不存在,则不是来自其他标签)。这可能会或可能不会对您的情况产生影响,具体取决于您从哪里获得这些 svg 以及它们是如何形成的。

var width = svgString.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1];
var height = svgString.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1];
于 2012-05-17T02:06:14.510 回答
1
var width = svgString.match(/^<svg.*?width="(\d+)/)[1];
var height = svgString.match(/^<svg.*?height="(\d+)/)[1];
于 2012-05-17T01:59:00.287 回答
0

确保将可选部件设为可选。(请参阅:正则表达式中“宽度”和 = 符号之间的点)

var width = svgString.match( /^<svg.*width\s*=\s*\"(\d*)\"$>/gm );

(假设 \s 匹配所有空格并且 \d 匹配所有数字)

于 2012-05-17T02:00:16.587 回答
0

这是一个适用于我测试的所有情况的解决方案。

const width = parseInt(svg.substring(svg.indexOf("width")).split('=')[1].match(/^\d+|\d+\b|\d+(?=\w)/g)[0]);
const height = parseInt(svg.substring(svg.indexOf("height")).split('=')[1].match(/^\d+|\d+\b|\d+(?=\w)/g)[0]);
于 2018-09-01T19:20:03.793 回答