正则表达式,jQuery,替换,函数,字符串操作,模板

时间:2018-06-14 23:59:26

标签: javascript jquery regex

我有以下功能:



def main():
    n = int(input("Enter a value: "))
    integer(n) 
def integer(n):
    if n <= 0:
        return n*0
    elif n > 0:
        return n*0 + 1
def integer(n=0):
    print("That value is less than or equal to 0")
def integer(n=1):
    print("That value is greater than 0")
main()
&#13;
function parseEntry(query, html, url) {

  // logic draft :(

  var re = new RegExp('{{{(.*)}}}');
  regex = query.replace(re, "$1");

  var newre = new RegExp(regex);
  regged = html.replace(newre, "$1");

  ret = query.replace(regex, regged);

  // parse selectors
  var re = new RegExp('{{(.*)}}');
  newtext = html.replace(re, "$1");

  ret = ret.replace(newtext, $(newtext).clone().html());

  // parse %url%
  ret = ret.replace("%url%", url);

  // ret remaining
  return ret;

}

// Called this way:
let output = parseEntry('static value %url% {{.thisclass}} {{{(\d+)}}}', '<h1 class="thisclass">Test</h1><h2 class="thisclass">Test2</h2> 1234 12', "http://perdu.com");

console.log(output)

/**
should return:
static value http://perdu.com TestTest2 123412
{{{triple brackets = regex}}}
{{double brackets = jquery}}
**/
&#13;
&#13;
&#13;

你能帮助重构parseEntry()函数来返回预期的输出吗?

所有帮助表示赞赏!

3 个答案:

答案 0 :(得分:0)

我不确定自己是不是,但这是尝试使用我认为在这种情况下有用的不同方法。有split()replace()createElement黑客解析html的示例。

var query = 'static value %url% {{.thisclass}} {{{(\d+)}}}';
var html = '<h1 class="thisclass">Test</h1><h2 class="thisclass">Test2</h2> 1234 12';
var url =  "http://perdu.com";

query = query.split(" ").map(o=>{
        return o.replace(/\{\{\{(.*)\}\}\}/g, "$1");
}).map(o=>{
        return o.replace(/\{\{(.*)\}\}/g, "$1");
});

var el = document.createElement( 'div' );
el.innerHTML = "<div class='outer'>"+html+"</div>";

var t1 = $("h1").text(); 
var t2 = $("h2").text();
var out = $(".outer").text();

var newArr = [];
newArr.push(query[0]+" "+query[1]+" "+url+" "+t1+t2+out);
newArr.push("{{{triple brackets = "+query[4]+"}}}");
newArr.push("{{double brackets = "+query[3]+"}}");

console.log(newArr);
newArr.map(o=>{
$("#res").append(o+"<br>");
});

此处的完整示例:http://jsfiddle.net/k8em5twd/6/

答案 1 :(得分:0)

因此,如果这个问题很简单,例如“为什么我的输出中没有显示反斜杠”,那么答案也非常简单。尝试像这样在输入字符串中转义反斜杠:

let output = parseEntry('static value %url% {{.thisclass}} {{{(\\d+)}}}', '<h1 class="thisclass">Test</h1><h2 class="thisclass">Test2</h2> 1234 12', "http://perdu.com");

关键是{{{(\d+)}}}变成{{{(\\d+)}}}。这样,斜杠被识别为字符。否则,\d被视为转义序列。输出如下。

function parseEntry(query, html, url) {

  // logic draft :(

  var re = new RegExp('{{{(.*)}}}');
  regex = query.replace(re, "$1");

  var newre = new RegExp(regex);
  regged = html.replace(newre, "$1");

  ret = query.replace(regex, regged);

  // parse selectors
  var re = new RegExp('{{(.*)}}');
  newtext = html.replace(re, "$1");

  ret = ret.replace(newtext, $(newtext).clone().html());

  // parse %url%
  ret = ret.replace("%url%", url);

  // ret remaining
  return ret;

}

// Called this way:
// THIS LINE IS CHANGED:
let output = parseEntry('static value %url% {{.thisclass}} {{{(\\d+)}}}', '<h1 class="thisclass">Test</h1><h2 class="thisclass">Test2</h2> 1234 12', "http://perdu.com");

console.log(output)

/**
should return:
static value http://perdu.com TestTest2 123412
{{{triple brackets = regex}}}
{{double brackets = jquery}}
**/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-2)

出于好奇最终自己做了:

function parseEntry(query, url, ht) {
	
	// parse regex expressions (triple brackets)
	var re = new RegExp('{{{(.*)}}}', 'g');
	q = query.match(re);
	for (qq in q) {
		var newregex = q[qq].replace("{{{", '').replace("}}}", '');
		newregex = new RegExp(newregex, 'g');
		newq = ht.match(newregex).join("");
		query = query.replace(q[qq], newq);
	}
	

	// parse jquery expressions (double brackets)
	re = new RegExp('{{(.*)}}', 'g');
	q = query.match(re);
	for (qq in q) {
		var newjq = q[qq].replace("{{", '').replace("}}", '');
		code = $('<div>'+ht+'</div>').find(newjq);
		appendHTML = '';
		code.each(function() {
			appendHTML += $(this).html();
		})
		
		query = query.replace(q[qq], appendHTML);
		
	}
	

	// parse %url%
	ret = query.replace("%url%", url);
	
	// ret remaining
	return ret;
}

let output = parseEntry('static value %url% {{.thisclass}} {{{(\\d+)}}}', "http://perdu.com", '<h1 class="thisclass">Test</h1><h2 class="thisclass">Test2</h2> 1234 12');

console.log(output);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>