- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 stackoverflow 上搜索了很多,发现非常有趣,其中包括:
How to create a Regular Expression for a span attribute?
还有 Javascript regex to replace text div and < >
但事实证明,我无法真正解析我的目标,即用数据类型属性替换 div 并删除字符串上的数据类型属性。
这就是我的做法。
//Doesn't work with multi lines, just get first occurrency and nothing more.
// Regex: /\s?data\-type\=(?:['"])?(\d+)(?:['"])?/
var source_code = $("body").html();
var rdiv = /div/gm; // remove divs
var mxml = source_code.match(/\S?data\-type\=(?:['"])?(\w+)(?:['"])?/);
var rattr =source_code.match(/\S?data\-type\=(?:['"])?(\w+)(?:['"])/gm);
var outra = source_code.replace(rdiv,'s:'+mxml[1]);
var nestr = outra.replace(rattr[0],'');// worked with only first element
console.log(nestr);
console.log(mxml);
console.log(rattr);
在此 HTML 示例页面上
<div id="app" data-type="Application">
<div data-type="Label"></div>
<div data-type="Button"></div>
<div data-type="VBox"></div>
<div data-type="Group"></div>
</div>
对具体事情有任何了解吗?我可能错过了一些东西,但我真的不知道,没有剩余空间否则在这里询问。
我创建了一个jsFiddle来展示,只需打开浏览器的控制台即可看到我的结果。
请随意回答 jsfiddle 或对我的正则表达式的更好解释,以及它失败的原因。
在收到任何反馈之前,我将继续尝试看看是否可以设法替换文本。
提前致谢。
最佳答案
将标记解析为对象树,然后将其转换为 MXML 可能会更容易。
类似这样的事情:
var source_code = $("body").html();
var openStartTagRx = /^\s*<div/i;
var closeStartTagRx = /^\s*>/i;
var closeTagRx = /^\s*<\/div>/i;
var attrsRx = new RegExp(
'^\\s+' +
'(?:(data-type)|([a-z-]+))' + // group 1 is "data-type" group 2 is any attribute
'\\=' +
'(?:\'|")' +
'(.*?)' + // group 3 is the data-type or attribute value
'(?:\'|")',
'mi');
function Thing() {
this.type = undefined;
this.attrs = undefined;
this.children = undefined;
}
Thing.prototype.addAttr = function(key, value) {
this.attrs = this.attrs || {};
this.attrs[key] = value;
};
Thing.prototype.addChild = function(child) {
this.children = this.children || [];
this.children.push(child);
};
function getErrMsg(expected, str) {
return 'Malformed source, expected: ' + expected + '\n"' + str.slice(0,20) + '"';
}
function parseElm(str) {
var result,
elm,
childResult;
if (!openStartTagRx.test(str)) {
return;
}
elm = new Thing();
str = str.replace(openStartTagRx, '');
// parse attributes
result = attrsRx.exec(str);
while (result) {
if (result[1]) {
elm.type = result[3];
} else {
elm.addAttr(result[2], result[3]);
}
str = str.replace(attrsRx, '');
result = attrsRx.exec(str);
}
// close off that tag
if (!closeStartTagRx.test(str)) {
throw new Error(getErrMsg('end of opening tag', str));
}
str = str.replace(closeStartTagRx, '');
// if it has child tags
childResult = parseElm(str);
while (childResult) {
str = childResult.str;
elm.addChild(childResult.elm);
childResult = parseElm(str);
}
// the tag should have a closing tag
if (!closeTagRx.test(str)) {
throw new Error(getErrMsg('closing tag for the element', str));
}
str = str.replace(closeTagRx, '');
return {
str: str,
elm: elm
};
}
console.log(parseElm(source_code).elm);
这会将您提供的标记解析为以下内容:
{
"type" : "Application"
"attrs" : { "id" : "app" },
"children" : [
{ "type" : "Label" },
{ "type" : "Button" },
{ "type" : "VBox" },
{ "type" : "Group" }
],
}
它是递归的,因此嵌入的组也会被解析。
关于javascript - 创建正则表达式来将 html 解析为 MXML 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641498/
我想做的是:创建一个带有一些子组件的 MXML 组件,然后通过 MXML 扩展它以创建一个具有更多子组件的新组件,而不会丢失原始集合。 换句话说 创建一个组件 bc.mxml 然后将其
正如标题所暗示的,“组件”(New –> MXML 组件)和“模块”(新建 –> MXML 模块)有什么区别? 谢谢, 大卫 最佳答案 模块被编译成 SWF 并在运行时使用 ModuleLoader
我一直在尝试创建一个自定义 mxml 组件来扩展另一个自定义 mxml 组件(即 MyMXMLComponent -> BaseMXMLComponent -> Group)。 我一直在读到,尝试向
在我的应用程序中使用 Flex-Blazeds-java...,在我的 Flex 应用程序端有两个 mxml 文件 Main.mxml 登录.mxml 在 Main.mxml 文件中有一个名为 Log
你好 我有一个正则表达式的问题。我在 MXML 中有一个 RegExpValidator,我希望它在源包含 a 或 b 时无效 我的 RegExpValidator 是 我的表达式是expressi
如果在 MXML 中可以完成的所有事情也可以在 ActionScript 中完成,而且很多事情在 ActionScript 中更容易完成(循环、条件等) 为什么要花时间学习 MXML? 我在这一点上的
我有一个宽度设置为 100% 的组合框。但是,当其中一个元素变大时,组合框也会变大,从而在我的应用程序中产生滚动条和其他丑陋之处!如何将组合框包含在其父项中? 注意,如果下拉列表较大,只要关闭的组合框
这是我尝试使用 MXML 库解析的 XML 文件: REQ 4567 192.168.1.1
我有一个可以运行的视频电话应用程序,但我现在正在尝试从数据库中获取一些数据。我对 PHP 最满意。 我正在尝试从名为“chat”的数据库中的“users”表获取 1 个值,其中 status=1(状态
我想在 AdvancedDataGrid 中提供我自己的 sortItemRenderer,如下所示: MyRenderer 是我编写的一个类,但 Flex 没有看到它并给出“未找到定义”错误,因为
当我在 MXML 组件中定义自定义属性时,我还想定义该属性的一组可能值,以便在调用代码完成函数时让 Flex Builder 显示(自定义属性的可能值)。 知道怎么做吗? 最佳答案 使用 [Inspe
我有一个只能在 classA 中使用的 classB。但是,classA 被编写为 mxml,而不是 actionscript 代码。是否可以在 MXML 中嵌套类或在同一个 .mxml 文件中的根标
我正在学习 Flex 并发现了一些奇怪的行为。当我尝试编译我的代码时,我抛出了这个错误 - 错误:调用可能未定义的方法 updateStory。我以前以这种方式使用过方法调用,但在这种情况下无法发现问
在我的MXML文件,我有一个带有三个 vbox 的选项卡导航器。
我怎么说 MXML 组件在某个包中?好吧,它在不同的文件夹中......我知道怎么做 ActionScript......但是当我在 MXML 中这样做时,我没有明确声明包,因为我不知道如何以及何时将
这是类(class): package fnc { import mx.containers.Canvas; public class Deck extends Canvas {
跳出框框思考... 可以采取哪些可能的基本方法来创建可以运行 Java 的 Flex 组件? 我知道我可以轻松地使用 Flex 浏览或启动 Java 应用程序,但有些事情只有当我可以从 MXML 组件
我有一个带有表单的 MXML,里面有两个 TextInput。我讨厌在 MXML 文件中包含任何代码(我来自 JavaScript 格式)所以我使用了 mx:Script source="extern
从本教程 http://www.brighthub.com/internet/web-development/articles/11010.aspx 我找到了下面的代码。有没有办法解决这个问题,所以
是否有一种简单的方法可以在 MXML 图形中绘制不涉及贝塞尔曲线的圆弧?或者我应该创建自己的组件? 谢谢! f 最佳答案 我最终创建了自己的 mxml 图形组件来绘制弧线。我覆盖 Ellipse Sp
我是一名优秀的程序员,十分优秀!