[英]Javascript: regex for replace words inside text and not part of the words
[英]Replace part of text in regex with javascript
我需要使用正则表达式更改我的URL。 例如,我的网址如下所示:
http://domain.com/blog/?page=2&order=asc&by=date
并使用javascript,我想动态地将order=asc
更改为order=desc
。 但是此函数也可用于任何属性,例如by
,因此仅靠order
是不可能的。
这是功能:
function replace(url, attribute, value) {
var pattern = new RegExp('([\?|\&])' + attribute + '=.\w+');
var replacement = '$1' + attribute + '=' + value;
return url.replace(pattern, '', url);
}
因此,在示例中,使用以下变量调用函数:
url = 'http://domain.com/blog/?page=2&order=asc&by=date'
attribute = 'order'
value = 'desc'
将返回http://domain.com/blog/?page=2&order=desc&by=date
。
您可以使用jQuery $.param
函数的逆函数来解析参数。
(function($) { $.unparam = function(value) { var params = {}; var pieces = value.split('&'); var pair, i, l; for (i = 0, l = pieces.length; i < l; i++) { pair = pieces[i].split('=', 2); params[decodeURIComponent(pair[0])] = (pair.length == 2 ? decodeURIComponent(pair[1].replace(/\\+/g, ' ')) : true); } return params; }; }(jQuery)); var url = 'http://domain.com/blog/?page=2&order=asc&by=date'; $('<p>').text('Before: ' + url).appendTo('body'); var parts = url.split('?'); var base = parts[0]; var params = parts[1]; var data = $.unparam(params); data.order = 'desc'; var newUrl = base + '?' + $.param(data); $('<p>').text('After: ' + newUrl).appendTo('body');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
(function($) { $.unparam = function(value) { var params = {}; var pieces = value.split('&'); for (var i = 0, l = pieces.length; i < l; i++) { var pair = pieces[i].split('=', 2); params[decodeURIComponent(pair[0])] = (pair.length == 2 ? decodeURIComponent(pair[1].replace(/\\+/g, ' ')) : true); } return params; }; }(jQuery)); function updateParams(url, data) { var parts = url.split('?'); var base = parts[0]; var params = parts.length > 0 ? parts[1] : ''; return base + '?' + $.param($.extend($.unparam(params), data)); } var oldUrl = 'http://domain.com/blog/?page=2&order=asc&by=date'; var newUrl = updateParams(oldUrl, { order: 'desc' }); $('<p>').text(newUrl).appendTo('body');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
new RegExp('([\?|\&])' + attribute + '=.\w+');
对此:
new RegExp('([?&])' + attribute + '=\\w+');
曾经转义的\\w+
是问题,因为javascript字符串插值实际上是在解释反斜杠本身,并最终将其剥离,并仅将正则表达式传递为“ w”。 逃避两次: \\\\w+
也:
[\\?|\\&]
是字符类,不需要|
交替(您现在实际上正在匹配管道符号)和诸如?
量词 特殊字符通常在字符类中不是特殊字符,因此无需转义它们。
您不需要.
在\\w+
之前, \\w+
就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.