用 javascript 替换正则表达式中的部分文本
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+
就足够了。
相关文章:
- Servlet对浏览器上显示的纯文本Javascript的响应
- 删除选定文本javascript前后的特定文本
- 在两个括号内插入文本 - Javascript
- 获取文本javascript+iframe
- 语音到文本JavaScript,HTML5
- 使用谷歌融合表格地图的网页文本/JavaScript未显示
- 在显示和隐藏文本(javascript)之间切换
- 使用哈希标记保存文本(Javascript - PHP - MySQL)
- 停止闪烁文本 JavaScript
- 如何计算一个字母在文本javascript中出现的次数
- 有效地突出显示文档中的文本 (JavaScript)
- 将变量传递给文本 javascript
- 如何暂停文本 Javascript / var textarray
- 从段落中搜索文本 - Javascript
- 如何使用 id 输入类型=“文本”JavaScript 中的值设置自动 2 个十进制数
- 替换文本 JavaScript .append()
- 语音到文本JavaScript识别医学词典
- 在提取的文本 JavaScript 中搜索关键字
- 如何在HTML中将文本javascript显示为正常正文的一部分
- 单击图像时更改段落文本(Javascript)