帮助!我对此的抨击时间比我想说的要长。我有一个字符串,可能包含也可能不包含连字符或逗号。如果是这样,我希望第一次出现的连字符或逗号左边的所有内容。如果没有,我想要整个字符串。
(.*?)[\,\-]
这给了我拼图的第一部分,但这会为&#34返回null;否则会给我整个字符串"部分:
(?=(.*?)[\,\-]|.*)
我在哪里错过了船?
答案 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)
)