如何使用javascript正则表达式全局查找和替换textarea中字符串的开头
我试图用JavaScript替换字符串中任何未编码的符号,我想知道这是否可行。我有正则表达式构建来检测字符串中的这种情况,但是当我进行替换时,我将丢失参数名 电流输入:如何使用javascript正则表达式全局查找和替换textarea中字符串的开头,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,我试图用JavaScript替换字符串中任何未编码的符号,我想知道这是否可行。我有正则表达式构建来检测字符串中的这种情况,但是当我进行替换时,我将丢失参数名 电流输入: http://www.somesite.com/id/2343?paramA=1¶mB=asdf 从文本区 <textarea id='test-box'>http://www.somesite.com/id/2343?paramA=1¶mB=asdf</textarea>
http://www.somesite.com/id/2343?paramA=1¶mB=asdf
从文本区
<textarea id='test-box'>http://www.somesite.com/id/2343?paramA=1¶mB=asdf</textarea>
var str = $('#test-box').val();;
var regex = /&[a-z]+=/gi;
str = str.replace(regex, [REPLACE &'s WITH &'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, '&')
var regex = /&([a-z]+)=/gi;
str = str.replace(/&([a-z]+)=/gi,'&$1');
在哪里。。。替换为该列表中您希望识别的实体集
请注意,大多数字符引用以分号结尾,因此不允许后面紧跟等号,因此与URL参数没有歧义。为了向后兼容,只有某些实体可以不带分号显示
如果您不关心验证,那么您可以通过确保您的URL不包含子字符串让浏览器处理验证。除了lookahead assert之外,您还可以使用backreference:
str.replace(/&(?!#(?:[0-9]|[xX][0-9A-Fa-f])|lt;|gt;|amp|...)/g, '&')
var regex = /&([a-z]+)=/gi;
str = str.replace(/&([a-z]+)=/gi,'&$1');
当替换字符串中出现$n
时,它将被regexp中的第n个括号模式替换。当您有jQueryhtml()
时,谁需要regex。特别是因为你的问题上有一个jquery
标记:D
这样做的目的是利用浏览器的innerHTML
属性。看
您可能应该使用正则表达式而不是正则表达式。@jbabey:它在这里有什么关系?encodeURIComponent将进行百分比编码,而OP需要HTML实体编码代码>并将丢失带有数字的字符引用,如½代码>。
var str = 'http://www.somesite.com/id/2343?paramA=1¶mB=asd';
$('#test-box').text(str);
$('#html-box').text($('#test-box').html());