文字列を 1 つ以上の部分文字列に分割する必要があります。それぞれの部分文字列には 2 つ以下のドットが含まれます。たとえば、文字列が の場合foo.boo.coo.too"
、次の配列を取得するための正規表現は?: ["foo.boo.coo", "boo.coo.too"]
. この質問に答えてくれる人がいることを願っています。私は数年間プログラミングをしてきましたが、この特定の問題を自分で解決できるほど正規表現にまだ慣れていないので、本当に感謝しています。事前にどうもありがとうございました。私が作成しているプログラムの貢献者としてあなたを信用できるように、あなたの身元を教えてください.
2 に答える
RegEx はこの問題のためのものであり、同様の問題がここで議論された最良の解決策ではありません: split-a-sting-every-characters-from-back-javascript
良い JavaScript ソリューションは、このような JavaScript 関数です。
function splitter(text){
var parts = text.split(".");
var times = parts.length - 2;
var values = [];
for(var index = 0; index<times;index++)
{
values.push(parts.slice(index,index+3).join("."));
}
return values;
}
splitter("too.boo.coo.too")
//=> Result tested on Chrome 25+ ["too.boo.coo", "boo.coo.too"]
これが役立つことを願っています
正規表現を使用したい場合は、ルックヘッドのものを試してください。これはhttp://www.regular-expressions.info/lookaround.htmlに役立ちます
正規表現はその性質上、交差しない結果を返すため、単一の正規表現から「すべての一致」が必要な場合は不可能です。
したがって、基本的には最初の一致を見つけてから、次の一致を見つけるために次の位置から開始する必要があります。here で説明されているこの手法のようなものは、C# の交差と一致します (JavaScript ではありませんが、考え方は同じです)。
たとえば、次の正規表現を使用できます。
(?<=^|\.)((?:[^.]*\.){2}[^.]*?)(?=$|\.)
ドットで開始および終了するか、行の開始/終了であり、内部に正確に 2 つのドットが含まれていること、およびキャプチャの結果が最初のキャプチャであることを保証します。必要に応じて、* を + に置き換えて、ドット間に少なくとも 1 つの記号が存在するようにすることができます。
ただし、このようなアプローチは、解決しようとしているタスクのパフォーマンスが非常に悪いことを理解する必要があるため、他の方法 (分割 + for など) を使用する方がより良い解決策になる可能性があります。