Javascript正则表达式以查找字符串并将其从整个字符串中提取

时间:2019-01-28 18:07:07

标签: javascript regex string match

我有一个包含字符串的Javascript字符串,例如:

http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD
http://www.example.com.tr/?first=RTR22414242144&second=YUUSADASFF
http://www.example.com.tr/?first=KOSDFASEWQESAS&second=VERERQWWFA
http://www.example.com.tr/?first=POLUJYUSD41234&second=13F241DASD
http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD

我想从这些URL中提取“第一个”查询参数值。

我的意思是我需要值DSPN47ZTE1BGMR,RTR22414242144,KOSDFASEWQESAS,POLUJYUSD41234、54SADFD14242RD

因为我不能很好地使用正则表达式,所以我找不到从数组中提取这些值的方法。任何帮助将不胜感激

4 个答案:

答案 0 :(得分:4)

为什么不使用正则表达式,而不仅仅是从字符串中创建URL对象并本地提取参数?

let url = new URL("http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD");
console.log(url.searchParams.get("first")); // -> "54SADFD14242RD"

如果您不知道第一个参数的名称,仍然可以使用URL构造函数手动搜索查询字符串。

let url = new URL("http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD");
console.log(url.search.match(/\?([^&$]+)/)[1]); // -> "54SADFD14242RD"

搜索的索引表示参数的位置(索引零是整个匹配的字符串)。请注意,.match返回null时没有匹配项,因此,如果URL中没有参数,则上面的代码将引发错误。

答案 1 :(得分:3)

是否必须使用正则表达式?会进行以下工作:

var x = 'http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD';
x.split('?first=')[1].split('&second')[0];

答案 2 :(得分:2)

尝试此正则表达式:

first=([^&]*)

捕获第1组的内容

Click for Demo

Code

说明:

  • first=-匹配first=
  • ([^&]*)-匹配非&的任何字符的0+次出现并将其存储在组1中

答案 3 :(得分:2)

您可以使用

(?<=\?first=)[^&]+? 
  • (?<=\?first=)-积极匹配?first=
  • [^&]+?-匹配最多&个字符(惰性模式)

Demo

没有积极的眼光,你这样做

let str = `http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD
http://www.example.com.tr/?first=RTR22414242144&second=YUUSADASFF
http://www.example.com.tr/?first=KOSDFASEWQESAS&second=VERERQWWFA
http://www.example.com.tr/?first=POLUJYUSD41234&second=13F241DASD
http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD`

let op = str.match(/\?first=([^&]+)/g).map(e=> e.split('=')[1])

console.log(op)