
Javascriptの正規表現です。Javascriptに限らなくてもヒントになれば言語は問いません。
括弧内にある複数カンマを置き換えたい。
aaaa(1,2),bbbbbb(1,2,3,4),ccccc(1),dddd(1,2,3)
なんていう文字列にあるカッコ内のカンマを
aaaa(1@2),bbbbbb(1@2@3@4),ccccc(1),dddd(1@2@3)
@に置き換えることは、正規表現で可能でしょうか?
/\((.+\,.+)\)/g
/\((.+(,).+)\)/g
などと試しましたがダメでしたわ…
わかる方いらっしゃいましたらお知らせください。
※要は、括弧外のカンマでsplitしたいんですが、カッコ内にもあるのでうまくいかず、、、1文字ずつ検査していくしかないのかな、と思ったり。他の方法がありましたらそれも教えてもらえると助かります。
No.4ベストアンサー
- 回答日時:
どのような文字列でも処理できる様にするため、
括弧の範囲内を一時的に退避させて、
余分なカンマを無くしてはいかがでしょうか。
var s = "a,bb(1),ccc(2,3),d(e(4,5),6)";
var w = []; // 退避先
var r = v => { w.push(v); return "@" + (w.length-1) };
var p = /\([^\(\)]*\)/g;
while (p.test(s)) s = s.replace(p, r); // 退避する
// w == [ "(1)", "(2,3)", "(4,5)", "(e@2,6)" ] ← 括弧が退避済み
// s == "a,bb@0,ccc@1,d@3" ← 余計なカンマがない
var q = /@(\d+)/g;
while (q.test(s)) s = s.replace(q, (v,i)=>w[i]); // 元に戻す
ありがとうございます。
おお、これはすごい。ネストしている括弧も対応してますね。完璧です。
正規表現の部分は私の理解を超えているのでじっくり研究してみたいと思います。
wの配列の中がアクロバットしていて、こんなこともできるのかと感嘆しました。
No.3
- 回答日時:
既に回答にあるものについて補足です。
split()は正規表現で実行できるので、下記でいけます。
var str = "aaaa(1,2),bbbbbb(1,2,3,4),ccccc(1),dddd(1,2,3)";
var result = str.split(/(?<=\)),/g);
ありがとうございます!
締め切らなくてよかった!!
こんな方法があるんですね。知りませんでした。
実際は括弧がない例外もあるので括弧があるかどうか検知してから条件分岐してからいただいたsplitの正規表現を実行させるのがよさそうだと辿り着きました。
助かります!!
※splitでもgの修飾子は必要なんですね。躓きそうなところだ。。。
No.2
- 回答日時:
逆に考えると区切り文字を置換すれば良いのでは?
経験皆無の者ですが考え方からググって検証したら、
var st = "aaaa(1,2),bbbbbb(1,2,3,4),ccccc(1),dddd(1,2,3)";
var str = st.replace(/(?<=\)),/g,'_');
console.log(str);
console.log(str.split('_'));
結果:
aaaa(1,2)_bbbbbb(1,2,3,4)_ccccc(1)_dddd(1,2,3)
[ 'aaaa(1,2)', 'bbbbbb(1,2,3,4)', 'ccccc(1)', 'dddd(1,2,3)' ]
となりましたが、これは不適合ですか?
ご回答ありがとうございます。
確かにいただいた考え方で出来そうです!
括弧がない例外もあるようなので出来る限り括弧内の変更が取れればいいと思っていたのですが、例外は例外で検知させて処理するのがよさそうです。
助かりました!!
No.1
- 回答日時:
括弧がネストしないことを前提にするなら前者は後読みでできそうな気がする. 言語によっていろんな制限があったりするので面倒くさいんだけど, 「括弧の中にあるカンマ 1個」なら
/(?<= \([^\)]*),/
でマッチする, かもしれない.
同じように考えれば「括弧の中にないカンマ」にマッチする正規表現も書けるような気がする.
いずれにしてもこの方針でいくなら後読みを使うことになるはず.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Java 正規表現について質問です。 カンマありの整数と、カンマなしの整数をよしとする正規表現が知りたいです。 4 2022/05/20 07:59
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- その他(教育・科学・学問) 「、」を「,」(カンマ)で綴っている文献って、何故そうしているんですか? 7 2022/11/30 19:59
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現について
-
セルの長文を、正規表現で連続...
-
正規表現
-
wikiの差分表示
-
正規表現で文字クラスの引き算
-
[VBS] テキストファイルから任...
-
Dream Weaver の正規表現 (*)
-
C言語にパターンマッチってない...
-
XMLファイルある内に書式につい...
-
PS4コントローラーをPCでゲーム...
-
SJISで、全角文字Aの文字コード...
-
パワーポイントのテキストボックス
-
エクセル
-
Access97のクエリ内でのStrConv...
-
Replaceを使って文字を変換する...
-
PCのモニターをテレビに・・・・
-
Word 途中で勝手に改行してしま...
-
VBAでの Replace関数で、ワイル...
-
文字の置換のソフトを探してい...
-
Chr(13)とChr(10)の違いは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 秀丸エディタ 行頭か...
-
メールアドレスの正規表現について
-
正規表現でAND検索はできる...
-
第二水準漢字が含まれるか?
-
[VBS] テキストファイルから任...
-
正規表現でシングルクォーテー...
-
正規表現でカウントアップ(?)す...
-
VB2005で、正規表現を使いたい
-
正規表現です。括弧内にある複...
-
文章中全ての半角カッコ ( の...
-
文字列検索(grepのようなもの)...
-
grepの正規表現での最短マッチ...
-
sedで正規表現の後方参照を使い...
-
XMLファイルある内に書式につい...
-
perl でこのマッチは失敗します...
-
VB.NET で正規表現を使用した検...
-
正規表現で大文字小文字指定に...
-
grepにマッチした正規表現の文...
-
正規表現で( , -, ] を表すと。
-
正規表現の逆?
おすすめ情報