捕获连字符正则表达式之间的单词

时间:2012-11-08 14:58:49

标签: regex hyphen

目前我有这个字符串

"RED-CURRENT_FORD-something.something"

我需要捕捉大肆宣传之间的这个词。在这种情况下,单词CURRENT_FORD

我有以下写的

\CURRENT_.*\B-\

哪个返回CURRENT_FORD-,这在两个级别上是错误的。

  1. 这意味着连字符之间的所有内容都以CURRENT
  2. 开头
  3. 最后包括连字符。​​
  4. 更有效地捕获连字符之间的单词而不明确说明第一个单词?

4 个答案:

答案 0 :(得分:6)

您可以使用分隔符来帮助绑定您的模式,然后使用括号捕获您想要的内容。

/-([^-]+)-/

然后您可以修剪连字符。

答案 1 :(得分:3)

您可以使用这些正则表达式

(?<=-).*?(?=-)//if lookaround is supported

-(.*?)-//captured in group1

.*?匹配任何字符,即. 0到多次,即*懒惰,?

(?<=-)是断言后面的零宽度,在所需匹配之前匹配字符-,即.*?(?=-)是零宽度前瞻断言匹配-

后匹配.*?个字符

答案 2 :(得分:1)

(?<=-)\w+(?=-)

连字符之间的任何序列或“单词”字符,这些连字符本身不参与捕获(后视和前瞻条件)

答案 3 :(得分:0)

尝试使用单词边界选项:

/^.*-\b(\w+)\b-.*$/

这实际上是3个(好的,2个)部分:

^.*-\b

说明从令牌开头到破折号后面跟着一个单词边界的所有字符('单词字符'和非'单词字符'之间不可见的边界)

(\w+)

捕获破折号之间的位并将其放入匹配的模式变量(这是括号的用途)

最后一部分只是重复第一部分以匹配短划线后的任何其他字符。