Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript正则表达式全局查找和替换textarea中字符串的开头_Javascript_Jquery_Regex_Replace - Fatal编程技术网

如何使用javascript正则表达式全局查找和替换textarea中字符串的开头

如何使用javascript正则表达式全局查找和替换textarea中字符串的开头,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,我试图用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>

我试图用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);
然后如何使用JavaScript保留参数的名称,并简单地将
'&'
替换为
'&;'

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


这使用了一个先行断言,而不是消耗掉参数名。

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

str.replace(/&(?!#(?:[0-9]|[xX][0-9A-Fa-f])|lt;|gt;|amp|...)/g, '&amp;')
var regex = /&([a-z]+)=/gi;
str = str.replace(/&([a-z]+)=/gi,'&amp;$1');
在哪里。。。替换为该列表中您希望识别的实体集

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


如果您不关心验证,那么您可以通过确保您的URL不包含子字符串
让浏览器处理验证。除了lookahead assert之外,您还可以使用backreference:

str.replace(/&(?!#(?:[0-9]|[xX][0-9A-Fa-f])|lt;|gt;|amp|...)/g, '&amp;')
var regex = /&([a-z]+)=/gi;
str = str.replace(/&([a-z]+)=/gi,'&amp;$1');

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

当您有jQuery
html()
时,谁需要regex。特别是因为你的问题上有一个
jquery
标记:D

这样做的目的是利用浏览器的
innerHTML
属性。看


您可能应该使用正则表达式而不是正则表达式。@jbabey:它在这里有什么关系?encodeURIComponent将进行百分比编码,而OP需要HTML实体编码并将丢失带有数字的字符引用,如
½
var str = 'http://www.somesite.com/id/2343?paramA=1&paramB=asd';
$('#test-box').text(str);
$('#html-box').text($('#test-box').html());