在使用正则表达式定位“之前可能包含大量字符的字符组”时遇到一些麻烦。我在一串查询参数上执行此操作。我可能会有这样的事情:
http://www.example.com?page=5&items=ASC&state=NY
我正在尝试在=ASC
之前找到所有字符,所以在这种情况下它会是items
。
由于items
是动态的,因此可能会发生变化,因此希望能够定位可以放在=ASC
之前的任何单词(包括连字符)。
以下是我需要满足的其他案例的几个例子:
http://www.example.com?status=ASC&state=HI
应该捕获status
http://www.example.com?page=5&e-mail=ASC&state=NY
应该捕获e-mail
我目前有:
const url = 'http://www.example.com?page=5&items=ASC&state=NY';
const newUrl = url.replace(/[a-zA-Z0-9-]=(?=ASC)/, 'test');
但它不起作用。
非常感谢任何和所有帮助。
答案 0 :(得分:0)
RegEx不是我的强项。
但是我认为这会像你之后的那样......
击穿..
(&\?)
首先找一个?或者& ..这成为第一个捕获组。
([a-zA-Z0-9-]*)=ASC
正在寻找您的 string = ASC ,这将成为我们将忽略的第二个捕获组
(&|$)
寻找&或结束,第三个捕获组
$1test=ASC$3
=使用第一个捕获组,添加test=ASC
,然后添加第三个捕获组..
var
urls = [
'http://www.example.com?page=5&items=ASC&state=NY',
'http://www.example.com?items=ASC&page=5&state=NY',
'http://www.example.com?page=5&state=NY&items=ASC',
'http://www.example.com?page=5&e-mail=ASC&state=NY'];
urls.forEach((url)=>{
console.log(url.replace(/(&|\?)([a-zA-Z0-9-]*)=ASC(&|$)/, '$1test=ASC$3'));
});

答案 1 :(得分:0)
如果您的搜索文本只是网址,则可以轻松解析。
类似的东西:
const urls = [
'http://www.example.com?page=5&items=ASC&state=NY',
'http://www.example.com?items=ASC&page=5&state=NY',
'http://www.example.com?page=5&state=NY&items=ASC',
'http://www.example.com?page=5&e-mail=ASC&state=NY'
];
const result = urls.map((url) => url.split('?')[1])
.map((search) => search.split('&')
.map((parts) => parts.split('='))
.filter((parts) => parts.indexOf('ASC') > -1)
.map(ascParts => ascParts[0]));
console.log(result);