Comments (4)
暂时不支持,下一个小版本加入支持吧
from avalon.
function test(o, s) {
var str = "aaa" + o + "ddfdsf" + s + "ddd ms-aaa{{ eee |ddd() }}";
var rregexp = /([-.*+?^${}()|[\]\/\\])/g
function escapeRegExp(target) {
//http://stevenlevithan.com/regex/xregexp/
//将字符串安全格式化为正则表达式的源码
return(target + "").replace(rregexp, "\\$1");
}
var reg = new RegExp(escapeRegExp(o) + "([^" + s + "]+)" + escapeRegExp(s) + "|\\sms-", "g")
RegExp.lastIndex = 0;
console.log(reg)
console.log(str.match(reg))
console.log(RegExp.$1)
var str2 = str + str;
str2.replace(reg, function(a, b) {
if (b) {
console.log(a + "!!!!!!")
console.log(b)
}
})
}
test("{{", "}}")
test("{&", "&}")
test("<%", "%>")
test("<<", ">>")//这个与位操作相冲突,不推荐
搞了一个强大的正则来处理此功能
from avalon.
kernel.interpolate = function(array) {
if (Array.isArray(array) && array[0] && array[1] && array[0] !== array[1]) {
openTag = array[0]
closeTag = array[1]
var o = escapeRegExp(openTag), c = escapeRegExp(closeTag)
rexpr = new RegExp(o + "([^" + closeTag + "]+)" + c)
rbind = new RegExp(o + "[^" + closeTag + "]+" + c + "|\\sms-")
}
}
kernel.interpolate(["{{", "}}"])
添加了一个配置项
avalon.config({
interpolate: ["<%", "%>"] // 要求openTag 不等于closeTag就能配置成功
})
from avalon.
今天试了一下,代码有问题。
function kernel(settings) {
for (var p in settings) {
if (!ohasOwn.call(settings, p))
continue
var val = settings[p]
if (typeof kernel.plugins[p] === "function") {
kernel.plugins[p](val)
} else {
kernel[p] = val
}
}
return this
}
这里kernel的处理我的理解如果plugins中有定义函数,则执行,如果没有,只是一个 赋值 。但是再看下面:
kernel.interpolate = function(array) {
if (Array.isArray(array) && array[0] && array[1] && array[0] !== array[1]) {
openTag = array[0]
closeTag = array[1]
var o = escapeRegExp(openTag),
c = escapeRegExp(closeTag)
rexpr = new RegExp(o + "(.*?)" + c)
rbind = new RegExp(o + ".*?" + c + "|\\sms-")
}
}
kernel.interpolate(["{{", "}}"])
这里interpolate并没有定义在plugins中,所以在执行kernel时,会只是把 ["{{", "}}"]
保存到kernel.interpolate上,而不是调用interpolate方法。因此,我将interpolate函数改为定义在上面的plugins中。然后修民入了 kernel.interpolate为kernel.plugins['interpolate'] = 'xxxx'。
同时我觉得上面的正则式使用 ‘[^' + c + ']' 感觉不太正确,所以我改为了贪婪写法,即使用 (.*?) 。大概改动了三处(还有一个将plugins拼写为了plugin的bug)。我提交一下pull request供参考吧。
from avalon.
Related Issues (20)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from avalon.