0

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

细绳:budgets-closed

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

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

任何想法,如何解决?

更新

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

我再说一遍:不是我不想使用 split;只是我真的很好奇,想看看,如何以正则表达式的方式完成。侵入事物的精神

更新2

好吧,使用substring也是一种解决方案:http: //jsfiddle.net/trDFh/2/是我选择使用的解决方案,因为有问题的 if 实际上是else if一种更复杂的if语法,并且选择的解决方案似乎成为目前最合适的。

4

3 回答 3

3

使用exec()

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

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

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

于 2013-10-09T01:09:58.183 回答
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];

我确信有更好的方法,但上述方法确实有效。

于 2013-10-09T01:10:26.740 回答
0

如果符号是明确的-,那么这应该工作:

\b([^-]+)-([^-]+)\b

您匹配一个边界,任何“非-”字符,一个-然后是更多“非-”字符,直到下一个单词边界。

此外,不需要转义连字符,它仅在字符类中的两个其他字符之间具有特殊属性。

编辑:这是一个jsfiddle,它证明它确实有效

于 2013-10-09T01:08:01.647 回答