JS正则表达式从url返回字符串

时间:2015-12-01 13:21:33

标签: javascript regex

我有以下网址结构:

Sync.tryReleaseShared(int)

我想从网址上剪切学生ID。到目前为止,我已经想出了这个:

https://api.bestschool.com/student/1102003120009/tests/json

返回

  

学生/ 1102003120009 /测试/ JSON

我只想要身份证。

1 个答案:

答案 0 :(得分:4)

您的正则表达式(student\/.*[^\/]*)匹配并捕获第1组文字序列student/,然后匹配换行符以外的任何字符,0或更多次出现(.*) - 可以匹配整条线一下子! - 然后是/以外的0个或更多字符。由于.*,它无效。此外,应将捕获组移至[^\/]*模式。

您可以使用以下正则表达式并抓取第1组值:

student\/([^\/]*)

请参阅regex demo

正则表达式按字面意思匹配student/,然后将捕获匹配到第1组零个或多个符号而不是/

或者,如果您想避免使用捕获,并假设ID始终为数字且后跟/tests/,则可以使用以下正则表达式:

\d+(?=\/tests\/)

\d+匹配1位或更多位数,(?=\/tests\/)检查数字后面是否有/tests/个字符序列。

var re = /student\/([^\/]*)/; 
var str = 'https://api.bestschool.com/student/1102003120009/tests/json';
var m = str.match(re);
if (m !== null) {
   document.getElementById("r").innerHTML = "First method&nbsp;&nbsp;&nbsp;&nbsp;: " + m[1] + "<br/>";
}
var m2 = str.match(/\d+(?=\/tests\/)/);
if (m2 !== null) {
    document.getElementById("r").innerHTML += "Second method: " + m2;
}
<div id="r"/>