我正在处理的页面上的id
定义了一组冒号分隔的字符串(例如thisPage:theForm:address1content
)。我无法更改此格式,我正在尝试对address1content
进行一些验证。
我正在尝试将id
address1content
传递给某个函数并执行replaceAll
并将:
替换为\\:
,这样我才能做到一个$(id)
。它不起作用。
这就是我所拥有的:
function validateContent(text) {
var hardCoded=$('#thisPage\\:theForm\\:address1content').val();
alert(hardCoded);
var regex = new RegExp(":", 'g');
replacedText = text.replace(regex, '\\:');
alert(replacedText);
foundElement= $(replacedText).val();
alert(foundElement);
}
现在变量hardCoded
正确地通过,但我希望能够动态地执行此操作,以便我可以验证多个字段。
如果有帮助,我会将简化版粘贴在小提琴中:http://jsfiddle.net/nYeJH/
答案 0 :(得分:3)
由于我的评论,真正的原因是文本中遗忘的#
。
答案 1 :(得分:3)
K,因为我的评论实际上回答了问题(只是阅读了标题,我得到你需要所有冒号前面都有一个双反斜杠),这是我的回答:
var foundElement= $(text.replace(/:/g,'\\\\:').val();
4个反斜杠:第一个逃避第二个,第三个逃脱第四个,结肠仍然是冒号,所以。
也就是说,一旦达到子串的一定数量的出现,正则表达式就会很慢。你应该对此进行基准测试,但它可能稍微快一些,并且(可能)更易于阅读以使用拆分:
var foundElement = $(text.split(':').join('\\\\:')).val();//4 slashes still
答案 2 :(得分:0)
.replace(/:/g,"\\:")
似乎完全正常(假设您对硬编码的说法是正确的)。看看这个jsfiddle。
如果硬编码的实际正在工作,并且您确实需要双重转义:
,请尝试此.replace(/:/g,"\\\\:")