前所有字符的正则表达式(javascript)

时间:2017-08-30 22:14:23

标签: javascript regex

在使用正则表达式定位“之前可能包含大量字符的字符组”时遇到一些麻烦。我在一串查询参数上执行此操作。我可能会有这样的事情:

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');

但它不起作用。

非常感谢任何和所有帮助。

2 个答案:

答案 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);