用\\替换id中的冒号:

时间:2012-08-17 15:06:44

标签: javascript regex salesforce visualforce

我正在处理的页面上的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/

3 个答案:

答案 0 :(得分:3)

由于我的评论,真正的原因是文本中遗忘的#

http://jsfiddle.net/nYeJH/6

答案 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,"\\\\:")

http://jsfiddle.net/SeNy5/

编辑:既然你有一个我们可以使用的jsfiddle,我注意到你在CSS选择器的开头不小心遗漏了哈希。