返回Javascript中字符串的特定部分
我想处理以下字符串:返回Javascript中字符串的特定部分,javascript,regex,Javascript,Regex,我想处理以下字符串:20\u hbeu50272359\u 402\u 21 因此,我只剩下hbeu50272359有没有办法删除这些外部数字?我不知道该怎么办 字符串也可以采用以下格式: hbeu50272359_402; u 21(?!\d)[^\u]+将在两个字符串上工作,并且不需要第二个字符串以hbeu开头 您可以使用split “20_hbeu50272359_402_21”。拆分(“U”)[1] 上面根据\uuuu字符分割字符串,然后使用[1]选择所需的部分(在返回的数组中或[“20
20\u hbeu50272359\u 402\u 21
因此,我只剩下hbeu50272359
有没有办法删除这些外部数字?我不知道该怎么办
字符串也可以采用以下格式:
hbeu50272359_402; u 21
(?!\d)[^\u]+
将在两个字符串上工作,并且不需要第二个字符串以hbeu
开头
您可以使用
split
“20_hbeu50272359_402_21”。拆分(“U”)[1]
上面根据\uuuu
字符分割字符串,然后使用[1]
选择所需的部分(在返回的数组中或[“20”、“hbeu50272359”、“402”、“21”]
)
这当然意味着字符串总是遵循相同的格式。如果没有,您可以使用正则表达式匹配,其前缀似乎是hbeu
。类似于/(hbeu[0-9]+)/
的内容,但我需要更多信息来提供更好的拆分方法
更新:
根据您的更新,您可以进行如下正则表达式匹配:
var stuffWeWant = "20_hbeu50272359_402_21".match(/(hbeu[0-9]+)/)[0];
// this will work regardless of the string before and after hbeu50272359.
一般来说,与使用正则表达式相比,拆分解决方案的性能更好。*
是贪婪的,引擎会尽可能多次重复它,因此正则表达式会继续尝试将\u
与下一个字符匹配,从而实现匹配
_hbeu50272359_402_21
要取消冻结,应添加一个?
:
_(.*?)_
现在它将匹配第一个\u一些字符
我将使用字符串。替换()
:
var s = "20_hbeu50272359_402_21";
var part = s.replace(/.*?_(.*?)_.*/, '$1');
搜索模式匹配任何字符*
,直到下一次出现\uu
。使用ungreedy量词?
可确保它在字符串中的最后一个\uu
之前不匹配任何字符。它将捕获文本,直到下一个
进入捕获组<代码>(.*)
。然后匹配下一个\uu
和剩余的字符串
替换模式使用
$1
来处理第一个捕获组的内容,并丢弃剩余的匹配项。您可以使用字符串。还可以使用replace
函数。换
- 一个或多个数字加上以下下划线符号
- 或
- 下划线加上一个或多个数字,后跟另一个下划线或线锚的结尾
> "20_hbeu50272359_402_21".replace(/_\d+(?=_|$)|^\d+_/g, "")
'hbeu50272359'
> "hbeu50272359_402_21".replace(/_\d+(?=_|$)|^\d+_/g, "")
'hbeu50272359'
你在跑哪只狼?显示您的尝试..Jquery这去掉了最后一个:n.replace(/.*/,'')这是因为
*
是贪婪的..您需要处理的所有字符串都是A_B_C_D形式,其中B是您需要的吗?var s='20_hbeu50272359_402; 21'/_(1),代码>如果所有字符串都是相同的形式,并且第二部分始终是它们所需要的部分,那么这就是我的工作方式。不幸的是,他们在这个问题上没有提供足够的信息来确定答案。完全同意。如果OP更新,将使用更强大的解决方案进行更新。您不能扩展“不工作”吗?当我放入“20_hbeu50272359_402_21”时,匹配(/(hbeu[0-9]+)/)[0]代码>在我的控制台中,我得到了hbeu50272359
是的。我正在使用firefox。您看到哪个浏览器出现故障?很抱歉,您是对的,它工作正常,非常感谢match:)感谢match他会得到正确答案:20\u hbeu50272359\u 402\u 21.match(/\uU(.*))[1]
在这两种情况下,split将如何为您提供所需的输出?