在Javascript中返回字符串的特定部分

时间:2015-04-07 12:53:13

标签: javascript regex

我想操纵以下字符串:20_hbeu50272359_402_21

所以我只留下hbeu50272359有没有办法可以删除那些外部数字?不确定如何去做。

字符串也可以采用以下格式:

hbeu50272359_402_21

6 个答案:

答案 0 :(得分:4)

您可以使用split

"20_hbeu50272359_402_21".split('_')[1]

上面根据_字符串拆分字符串,然后使用[1]选择所需的部分(在返回的数组中或["20", "hbeu50272359", "402", "21"]

这当然会假设您的字符串始终遵循相同的格式。如果不是,你可以使用regEx匹配看似hbeu的前缀。像/(hbeu[0-9]+)/之类的东西但是我需要更多信息来更好地处理split方法

更新:

根据您的更新,您可以执行正则表达式匹配,如:

var stuffWeWant = "20_hbeu50272359_402_21".match(/(hbeu[0-9]+)/)[0];
// this will work regardless of the string before and after hbeu50272359.

答案 1 :(得分:2)

(?!\d)[^_]+适用于两个字符串,并且不需要第二个字符串以hbeu开头。

https://regex101.com/r/zF0iR5/3

答案 2 :(得分:2)

您也可以使用string.replace功能。即,替换

  • 一个或多个数字加上开头的以下下划线符号

  • 或者

  • 下划线加上一个或多个数字后跟另一个下划线或行锚点的结尾

空字符串。

> "20_hbeu50272359_402_21".replace(/_\d+(?=_|$)|^\d+_/g, "")
'hbeu50272359'
> "hbeu50272359_402_21".replace(/_\d+(?=_|$)|^\d+_/g, "")
'hbeu50272359'

答案 3 :(得分:1)

通常,与使用正则表达式相比,拆分解决方案的性能更好。

答案 4 :(得分:1)

* greedy ,引擎会尽可能多地重复它,因此正则表达式会继续尝试将_与下一个字符匹配,从而产生匹配效果

_hbeu50272359_402_21

为了使其不合适,您应该添加?

_(.*?)_

现在它与第一个_somecharacters_匹配。

答案 5 :(得分:1)

我会使用String.replace()

var s = "20_hbeu50272359_402_21";
var part = s.replace(/.*?_(.*?)_.*/, '$1');

搜索模式匹配任何字符.*,直到下一次出现_。使用ungreedy量词?可确保它与字符串中的最后一个_之前的任何字符都不匹配。它会捕获文本,直到下一个_进入捕获组。 (.*?)。然后匹配下一个_和剩余的字符串。

替换模式使用$1来解决第一个捕获组的内容并丢弃剩余的匹配。