7

目前我有这个字符串

"RED-CURRENT_FORD-something.something"

我需要捕捉连字符之间的单词。在这种情况下,这个词CURRENT_FORD

我写了以下内容

\CURRENT_.*\B-\

哪个返回CURRENT_FORD-哪个在两个层面上是错误的。

  1. 这意味着连字符之间的所有内容都以CURRENT
  2. 它包括最后的连字符。

有没有更有效的方法来捕获连字符之间的单词而不明确说明第一个单词?

4

4 回答 4

6

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

/-([^-]+)-/

然后,您可以修剪连字符。

于 2012-11-08T15:00:49.107 回答
5

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

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

或者

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

.*?匹配任何字符 ie .0 到多次 ie *lazily ie?

(?<=-)是一个零宽度的后视断言,它将匹配所需匹配之前的字符,-即是一个零宽度的前瞻断言,它匹配匹配后的字符.*?(?=-)-.*?

于 2012-11-08T15:01:44.857 回答
1
(?<=-)\w+(?=-)

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

于 2012-11-08T15:05:54.597 回答
0

尝试使用单词边界选项:

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

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

^.*-\b

表示从标记开头到破折号后跟单词边界的所有字符(“单词字符”和非“单词字符”之间的不可见边界)

(\w+)

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

最后一部分只是第一部分的重复,以匹配破折号后的任何其他字符。

于 2012-11-08T15:24:17.293 回答