目前我有这个字符串
"RED-CURRENT_FORD-something.something"
我需要捕捉大肆宣传之间的这个词。在这种情况下,单词CURRENT_FORD
我有以下写的
\CURRENT_.*\B-\
哪个返回CURRENT_FORD-
,这在两个级别上是错误的。
CURRENT
更有效地捕获连字符之间的单词而不明确说明第一个单词?
答案 0 :(得分:6)
您可以使用分隔符来帮助绑定您的模式,然后使用括号捕获您想要的内容。
/-([^-]+)-/
然后您可以修剪连字符。
答案 1 :(得分:3)
您可以使用这些正则表达式
(?<=-).*?(?=-)//if lookaround is supported
或强>
-(.*?)-//captured in group1
.*?
匹配任何字符,即.
0到多次,即*
懒惰,?
(?<=-)
是断言后面的零宽度,在所需匹配之前匹配字符-
,即.*?
和(?=-)
是零宽度前瞻断言匹配-
.*?
个字符
答案 2 :(得分:1)
(?<=-)\w+(?=-)
连字符之间的任何序列或“单词”字符,这些连字符本身不参与捕获(后视和前瞻条件)
答案 3 :(得分:0)
尝试使用单词边界选项:
/^.*-\b(\w+)\b-.*$/
这实际上是3个(好的,2个)部分:
^.*-\b
说明从令牌开头到破折号后面跟着一个单词边界的所有字符('单词字符'和非'单词字符'之间不可见的边界)
(\w+)
捕获破折号之间的位并将其放入匹配的模式变量(这是括号的用途)
最后一部分只是重复第一部分以匹配短划线后的任何其他字符。