正则表达式 - 如果字符串包含 - 或者,其他所有内容都保留整个字符串

时间:2014-02-24 21:28:12

标签: regex string if-statement conditional

帮助!我对此的抨击时间比我想说的要长。我有一个字符串,可能包含也可能不包含连字符或逗号。如果是这样,我希望第一次出现的连字符或逗号左边的所有内容。如果没有,我想要整个字符串。

(.*?)[\,\-]

这给了我拼图的第一部分,但这会为&#34返回null;否则会给我整个字符串"部分:

(?=(.*?)[\,\-]|.*)

我在哪里错过了船?

2 个答案:

答案 0 :(得分:2)

尝试

/^[^,-]+/

即。在JavaScript中

"one two three".match(/^[^,-]+/); //["one two three"]
"one, two three".match(/^[^,-]+/); //["one"];

[编辑,回应OP关于新要求的评论]

仅在字符串中的某处找到字母“m”时才匹配:

"one two m th,ree".match(/^(?=[\s\S]*m)[^,-]+/); //["one two m th"]
"one two th,ree".match(/^(?=[\s\S]*m)[^,-]+/); //null

答案 1 :(得分:0)

我不会这样做,但它返回一个匹配但没有内容
因为.*在断言中并且未被捕获。

通常断言不会捕获任何内容,但它们可以匹配 为了捕获断言内部,您必须包含捕获父级。

此外,这同样适用于断言中的断言。

因此,对于单个捕获组$1,您必须执行类似

的操作
 # ^(?=(.*?(?=[,-])|.*))

 ^ 
 (?=
      (                      # (1 start)
           .*? 
           (?= [,-] )
        |  .* 
      )                      # (1 end)
 )