0

我正在尝试替换 JavaScript 中字符串中的任何非编码 & 符号,并想知道这是否可能。我有正则表达式构建来检测字符串中的这一点,但是当我进行替换时,我会丢失参数名称。

电流输入:

http://www.somesite.com/id/2343?paramA=1&paramB=asdf

从文本区域

<textarea id='test-box'>http://www.somesite.com/id/2343?paramA=1&paramB=asdf</textarea>

var str   = $('#test-box').val();;
var regex = /&[a-z]+=/gi;
str = str.replace(regex, [REPLACE &'s WITH &amp;'s]);
console.log(str);

期望的输出:

http://www.somesite.com/id/2343?paramA=1&amp;paramB=asdf

然后我怎样才能使用 JavaScript 来保留参数的名称并简单地替换'&'with '&amp;'

4

4 回答 4

3

试试这个正则表达式:/&(?=[a-z]+=)/和这个替换:&amp;

这使用了前瞻断言而不是吃掉参数名称。

于 2013-05-06T17:18:02.570 回答
2

如果您有一个可能部分以 HTML 编码的 URL,并且您正在尽最大努力生成 XHTML 验证 textarea 内容,那么您可以使用HTML 字符引用列表来识别不属于 HTML 的 & 符号人物参考:

str.replace(/&(?!#(?:[0-9]|[xX][0-9A-Fa-f])|lt;|gt;|amp|...)/g, '&amp;')

其中 ... 被替换为该列表中您想要识别的实体集。

请注意,大多数字符引用都以分号结尾,因此不允许紧跟等号,因此与 URL 参数没有歧义。为了向后兼容,只有某些实体可以不带分号出现。

如果您不关心验证,那么您可以让浏览器</textarea通过执行类似的操作确保您的 URL 不包含子字符串来处理它

str.replace(/</g, '%3c')
于 2013-05-06T17:19:25.333 回答
1

除了前瞻断言,您还可以使用反向引用:

var regex = /&([a-z]+)=/gi;
str = str.replace(/&([a-z]+)=/gi,'&amp;$1');

$n出现在替换字符串中时,它将被正则表达式中的第 n 个带括号的模式替换。

于 2013-05-06T17:22:56.647 回答
1

当您拥有 jQuery 时,谁需要正则表达式html()。特别是因为你jquery的问题上有一个标签:D

这样做是利用浏览器的innerHTML属性。见api

小提琴

var str = 'http://www.somesite.com/id/2343?paramA=1&paramB=asd';
$('#test-box').text(str);
$('#html-box').text($('#test-box').html());
于 2013-05-06T18:02:26.327 回答