0

文字列内の記号の前後の文字を一致させようとしています。

ストリング:budgets-closed

記号の前の文字を一致させるには、次の-ようにします。^[a-z]+

そして、他の文字と一致させるために、試してみます:\-(\w+)しかし、問題は、結果が:-closedではなく: であることですclosed

それを修正する方法はありますか?

アップデート

これは、正規表現http://jsfiddle.net/trDFh/1/を適用しようとしていたコードです。

繰り返しますが、split を使いたくないわけではありません。それは私が本当に興味があり、正規表現の方法でどのように行うことができるかを見たかっただけです。物事の精神へのハッキング

Update2

問題のifは実際にはより複雑な構文substringであり、選択されたソリューションは今のところ最も適していること。else ifif

4

3 に答える 3

3

exec()を使用します。

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

resultは配列で、result[1]が最初にキャプチャされた文字列でresult[2]、 が 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

境界、「not -」文字、a、および次の単語境界までの-「not 」文字に一致します。-

また、ハイフンをエスケープする必要はありません。文字クラス内の他の 2 つの文字の間にある場合にのみ、特別なプロパティを保持します。

編集:そして、これが機能することを示すjsfiddleです

于 2013-10-09T01:08:01.647 に答える