我正在使用javascript和经典的asp,我希望有人可以帮助我使用这个正则表达式。
我需要替换
撇号与正则表达式之间的“(引用)
。
我在考虑这个问题,但这会用引号替换整个字符串吗?
textarea = textarea.replace(/\'.*?\'/ig, '"e;');
而不是'this is the text "click here"'
我需要它
'this is the text ""e;click here"e;'
我的身体可以帮助
由于
答案 0 :(得分:1)
首先,您需要将.*?
转换为捕获组,方法是将()
置于其周围。然后在替换方法中,您可以使用$1
来表示第一个捕获组,$2
来表示第二个捕获组,等等。换句话说,您可以这样做:
textarea.innerHTML = textarea.innerHTML
.replace(/'(.*?)"(.*?)"(.*?)'/g,
"'$1&quote;$2&quote;$3'");
我认为你想要用“& quot;而不是字符& quot;”来代替,但你可以在必要时轻松替换它。
答案 1 :(得分:0)
仅供参考,你不能用一个正则表达式做到这一点并让它变得万无一失。原因是正则表达式无法跟踪状态,因此如果您的完整字符串类似于
'"test"' "test" '"test"'
正则表达式无法知道第二个引用的test
不应该被替换。
要执行此操作,您需要先匹配/'([^\']+)'/
,然后对每个匹配中的所有引号进行替换.replace/(\"/g, '"')
答案 2 :(得分:0)
是的,你需要不止一个正则表达式。假设您不想处理转义引号,则此测试函数适用于您的测试数据:
function process_data(text)
{ // Convert double quotes to HTML entity inside single quoted strings.
var re_dsq = /("[^"]*")|('[^']*')/g; // $1 = "string" or $2 = 'string'
var re_dq = /"/g; // A single "
text = text.replace(re_dsq, function(m0, m1, m2) {
if (m1) return m1;
return m2.replace(re_dq, '"');
});
return text;
}
如果您确实需要处理具有转义引号的字符串,则可以轻松修改正则表达式。