正则表达式尝试匹配符号前后的字符

时间:2013-10-09 01:04:34

标签: javascript regex

我正在尝试在符号之前和之后匹配字符串中的字符。

字符串:budgets-closed

为了匹配符号-之前的字符,我执行:^[a-z]+

为了匹配其他字符,我尝试:\-(\w+)但问题是我的结果是:-closed而不是closed

任何想法,如何解决?

更新

这是一段代码,我试图应用正则表达式http://jsfiddle.net/trDFh/1/

我再说一遍:并不是说我不想使用分裂;这只是我真的很好奇,并希望看到,如何以正则表达式方式完成。黑客入侵事物精神

UPDATE2

好吧,使用substring也是一个解决方案:http://jsfiddle.net/trDFh/2/并且是我选择使用的解决方案,因为问题的if实际上是更复杂的else if { {1}}语法,所选择的解决方案现在似乎是最合适的。

3 个答案:

答案 0 :(得分:3)

使用exec()

var result=/([^-]+)-([^-]+)/.exec(string);

result是一个数组,result[1]是第一个捕获的字符串,result[2]是第二个捕获的字符串。

现场演示:http://jsfiddle.net/Pqntk/

答案 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.

编辑:这是一个jsfiddle that demonstrates it does work

相关问题