Javascript 仅当匹配模式为';它不在包含正则表达式的内容中的特定位置
我们正在构建的部分工具在很大程度上依赖于正则表达式。 其中之一就是使用标准javascript的“RegExp”动态地用实际值替换占位符 我们所有的占位符都是这样的:Javascript 仅当匹配模式为';它不在包含正则表达式的内容中的特定位置,javascript,html,angularjs,regex,Javascript,Html,Angularjs,Regex,我们正在构建的部分工具在很大程度上依赖于正则表达式。 其中之一就是使用标准javascript的“RegExp”动态地用实际值替换占位符 我们所有的占位符都是这样的: {{key}} 在大多数情况下,更换是直接和简单的,我们构建了匹配模式,如下所示: var pattern = new RegExp('{{key}}', 'g'); 然而,至少有一种情况下,这种方法不起作用。假设我们有一个a标记,其href中有一个占位符: <a href="http://google.com?q={{
{{key}}
在大多数情况下,更换是直接和简单的,我们构建了匹配模式,如下所示:
var pattern = new RegExp('{{key}}', 'g');
然而,至少有一种情况下,这种方法不起作用。假设我们有一个a
标记,其href中有一个占位符:
<a href="http://google.com?q={{key}}">http://google.com?q={{key}}</a>
我们需要用html代码替换占位符(在某些情况下),但正如您所想象的,它会破坏标记
注意:它可能是任何链接或链接内的任何内容
如何仅替换不在
href
中的占位符?甚至有可能吗?根据您想对href
中的{{key}}
执行什么操作,您可以退出大括号,或者添加对过滤器的支持
转义:
var values = {"key": "stackoverflow"};
var html = template.replace(/\\([{}\\])|{{(\w+)}}/g, function (match, esc, name) {
// Remove backslashes from an escaped characters, or replace placeholders
// by their values.
return esc ? esc : values[name];
});
例如:
<a href="http://google.com?q=\{{key}}">http://google.com?q={{key}}</a>
<a href="http://google.com?q={{key|quote}}">http://google.com?q={{key}}</a>
过滤器:
var values = {"key": "stackoverflow"};
var filters = {
"quote": function (value) {
return quote.replace(/"/g, """);
}
};
var html = template.replace(/{{(\w+(?:\s*\|\s*\w+)*)}}/g, function (match, expr) {
var names = expr.split(/\s*\|\s*/g);
var value = values[expr[0]];
for (var i = 1; i < names.length; i++) {
value = filters[name[i]](value);
}
});
var值={“key”:“stackoverflow”};
变量过滤器={
“报价”:函数(值){
返回报价。替换(/“/g,”);
}
};
var html=template.replace(/{(\w+(?:\s*\\124;\ s*\w+)}}/g,函数(匹配,表达式){
变量名称=表达式拆分(/\s*\\124;\ s*/g);
var值=值[expr[0]];
对于(变量i=1;i
例如:
<a href="http://google.com?q=\{{key}}">http://google.com?q={{key}}</a>
<a href="http://google.com?q={{key|quote}}">http://google.com?q={{key}}</a>
您还可以使用AngularJS的内置模板
var templateElm = angular.element("<div>").html(template);
var innerScope = $scope.$new(true);
// Shallow copy values into the scope
angular.extend(innerScope, values);
var elem = $compile(templateElm)(innerScope);
// Wait for automatic $digest to complete
$timeout(function () {
var html = elem.html();
innerScope.$destroy();
// Do something with 'html'
});
var templatelm=angular.element(“”.html(模板);
var innerScope=$scope.$new(true);
//将值浅拷贝到范围中
角度扩展(内部范围,值);
var elem=$compile(templatelm)(内部范围);
//等待自动$digest完成
$timeout(函数(){
var html=elem.html();
内窥镜。$destroy();
//用“html”做些什么
});
匹配并捕获要保留的文本,只需匹配需要替换的文本即可。请看,使用JS代码进一步操作组内容。好的,这一个对于这个特定的情况非常具体。占位符可能位于内容中的任何位置,而不仅仅是链接。我想知道,是否有办法找到href属性之外的所有内容。同样的方法,根据您的需要进行调整:。与任何用于HTML操作的正则表达式方法一样,这并不能保证在100%的情况下都能很好地工作。所以,如果不是正则表达式,您会有什么建议?