如何使用javascript正则表达式全局查找和替换文本区域字符串的开头

How to use a javascript Regex to globally find and replace the beginning of a string from a textarea

本文关键字:区域 文本 字符串 开头 替换 javascript 何使用 正则表达式 全局 查找      更新时间:2023-09-26

我试图在JavaScript字符串中替换任何非编码的&号,并且想知道这是否可能。我有regex构建来检测字符串中的这个,但是当我做替换时,我将失去参数名称。

当前输入:

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

从textarea

<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来保持参数的名称,并简单地将'&'替换为'&amp;' ?

试试这个regex: /&(?=[a-z]+=)/和这个替换:&amp;

这使用了一个前瞻性断言,而不是吃掉参数名。

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

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

的地方……被替换为您想要识别的列表中的一组实体。

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

如果你不关心验证,那么你可以让浏览器照顾它,确保你的URL不包含子字符串</textarea,做一些像

str.replace(/</g, '%3c')

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

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

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

谁需要regex当你有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());