从具有js正则表达式

时间:2017-11-02 09:18:30

标签: javascript regex

给定字符串'/root/hello/hello/world'

我想提取路径中的倒数第二个组件,即第二次出现hello。

如果没有父部件,我希望它返回空。所以字符串/world应该返回一个空字符串或null。

如何使用正则表达式或类似方法提取最后一个路径组件?

语言是javascript。

4 个答案:

答案 0 :(得分:1)

您可以先在/字符上split the string将其转换为数组:

var split = '/root/hello/hello/world'.split('/')

-> ["", "root", "hello", "hello", "world"]

然后你可以抓住倒数第二项:

var result = split[split.length - 2]

...但您可能需要先检查阵列的长度:

var result;
if (split.length >= 2)
  result = split[split.length - 2]

答案 1 :(得分:1)

你可以做到

let str = '/root/hello/hello/world';

let result = str.split('/');
console.log(result[result.length-2]);

答案 2 :(得分:0)

你不需要正则表达式,你可以拆分它。

const string = '/root/hello/hello/world';

// Split by the '/' character
const stringSplit = string.split('/');

// Slice the array, taking only the last 2 items.
// Then select the first one in the array
const myVal = stringSplit.slice(-2)[0];

// OR, using length
const myValLen = stringSplit[stringSplit.length - 2];

// OR, in one
const myValShort = string.split('/').slice(-2)[0];

答案 3 :(得分:0)

根据要求使用正则表达式,您可以使用

执行此操作
([^/\n]*)\/[^/\n]*$

将第二个到最后一个部分捕获到捕获组1中。

([^/\n]*)部分捕获(括号内)一段不是/的字符,也不是新行(\n)。 \/确保后跟/[^/\n]*$检查该行终于被另一个没有/(或LF)的段终止。



var pathArray = [
      '/root/hello/cruel/world',
      '/root/hello/world',
      '/root/world',
      '/world'
    ],
    re = /([^/\n]*)\/[^/\n]*$/;
    
pathArray.forEach(function (path) {
  document.write( '"' + path + '" returns "' + re.exec(path)[1] + '"<br/>' );
});
&#13;
&#13;
&#13;

Try it out and experiment with it here at regex101