我正在尝试在符号之前和之后匹配字符串中的字符。
字符串:budgets-closed
为了匹配符号-
之前的字符,我执行:^[a-z]+
为了匹配其他字符,我尝试:\-(\w+)
但问题是我的结果是:-closed
而不是closed
。
任何想法,如何解决?
这是一段代码,我试图应用正则表达式http://jsfiddle.net/trDFh/1/
我再说一遍:并不是说我不想使用分裂;这只是我真的很好奇,并希望看到,如何以正则表达式方式完成。黑客入侵事物精神
好吧,使用substring
也是一个解决方案:http://jsfiddle.net/trDFh/2/并且是我选择使用的解决方案,因为问题的if实际上是更复杂的else if
{ {1}}语法,所选择的解决方案现在似乎是最合适的。
答案 0 :(得分:3)
使用exec():
var result=/([^-]+)-([^-]+)/.exec(string);
result
是一个数组,result[1]
是第一个捕获的字符串,result[2]
是第二个捕获的字符串。
答案 1 :(得分:2)
我认为你必须与之相匹配。但是,您可以使用分组来获得所需内容。
var str = 'budgets-closed';
var matches = str.match( /([a-z]+)-([a-z]+)/ );
var before = matches[1];
var after = matches[2];
对于该特定字符串,您还可以使用
var str = 'budgets-closed';
var before = str.match( /^\b[a-z]+/ )[0];
var after = str.match( /\b[a-z]+$/ )[0];
我确信有更好的方法,但上述方法确实有效。
答案 2 :(得分:0)
如果符号具体为-
,那么这应该有效:
\b([^-]+)-([^-]+)\b
您匹配边界,任何“非-
”字符,-
以及更多“非-
”字符,直到下一个字边界为止。
此外,无需转义连字符,它只保留special properties when between two other characters inside a character class.