目前我有这个字符串
"RED-CURRENT_FORD-something.something"
我要抓住催眠者之间的话。在这种情况下 CURRENT_FORD 我写了以下内容
CURRENT_FORD
\CURRENT_.*\B-\
它回来了 CURRENT_FORD- 这在两个层面上都是错误的。它意味着连字符之间的一切都以 CURRENT 它包括结尾的连字符。有没有更有效的方法来捕捉连字符之间的单词而不显式地声明第一个单词?
CURRENT_FORD-
CURRENT
ssgvzors1#
您可以使用分隔符来帮助绑定模式,然后用括号捕获所需内容。
/-([^-]+)-/
然后可以修剪连字符。
liwlm1x92#
你可以用这些正则表达式
(?<=-).*?(?=-)//if lookaround is supported
或
-(.*?)-//captured in group1 ``` `.*?` 匹配任何字符,即。 `.` 0到多次,即。 `*` 懒散地,即 ? `(?<=-)` 是与字符匹配的零宽度look-behindAssert `-` 在期望的匹配之前,即 `.*?` 以及 `(?=-)` 是与 `-` 匹配后字符 `.*?`
enxuqcxy3#
(?<=-)\w+(?=-)
在连字符之间的任何序列或“单词”字符,它们本身不参与捕获(向后看和向前看条件)
k5ifujac4#
尝试使用单词边界选项:
/^.*-\b(\w+)\b-.*$/
这实际上是三个部分:
^.*-\b
表示从标记开头到破折号后跟单词边界(单词字符和非单词字符之间的不可见边界)的所有字符
(\w+)
捕获破折号之间的位并将其放入匹配的模式变量中(这就是方括号的作用)最后一部分只是第一部分的重复,以匹配破折号后的任何其他字符。
4条答案
按热度按时间ssgvzors1#
您可以使用分隔符来帮助绑定模式,然后用括号捕获所需内容。
然后可以修剪连字符。
liwlm1x92#
你可以用这些正则表达式
或
enxuqcxy3#
在连字符之间的任何序列或“单词”字符,它们本身不参与捕获(向后看和向前看条件)
k5ifujac4#
尝试使用单词边界选项:
这实际上是三个部分:
表示从标记开头到破折号后跟单词边界(单词字符和非单词字符之间的不可见边界)的所有字符
捕获破折号之间的位并将其放入匹配的模式变量中(这就是方括号的作用)
最后一部分只是第一部分的重复,以匹配破折号后的任何其他字符。