2

照合するために次のものが与えられたと仮定します。

{This is a test} に 'hello world' を挿入

文字列内のテキストのインデックスを知る必要があるため、空白で一致させ、すべての一致を文字列配列にプッシュしたいと考えています。

ここで注意が必要です。一重引用符 (') 内および中括弧 ({}) 内の空白は除外する必要があります

私の望ましい結果は次のようになります。

  1. 入れる
  2. 'こんにちは世界'
  3. の中へ
  4. {これはテストです}

これまでのところ、一重引用符内の空白を除外できましたが、中括弧と組み合わせる方法がわかりません。

今のところ私の正規表現:

\s(?=(?:[^']|'[^'] ') $)

4

2 に答える 2

2

これはかなりトリッキーです。今回は分割ではなくマッチングを考えました:

'[^']*'|\{[^\}]*\}|\S+

少し説明しましょう:

'[^']*'     # match a quoted string
|           # or
\{[^\}]*\}  # match zero or more characters between curly brackets
|           # or
\S+         # match a non-white space character one or more times

Online demo

于 2013-11-14T12:25:09.887 に答える
1

Niekert は、言及されていない簡単な解決策があったため、この質問を復活させました。この状況は、状況 s1、s2、s3 などを除いて、パターンの一致 (または置換)と非常によく似ています。

簡単な正規表現は次のとおりです。

{[^}]+}|( )

交互の左側は、完全な{ ... }波括弧に一致します。これらの一致は無視されます。右側はスペースをグループ 1 に一致させてキャプチャします。左側の式では一致しなかったため、これらが正しいスペースであることがわかります。

このプログラムは、正規表現の使用方法を示しています (オンライン デモのペインで結果を参照してください)。

<script>
var subject = "insert 'hello world' into {This is a test}";
var regex = /{[^}]+}|( )/g;
var match = regex.exec(subject);
replaced = subject.replace(regex, function(m, group1) {
    if (group1 == "" ) return m;
    else return "SplitHere";
});
splits = replaced.split("SplitHere");
document.write("*** Splits ***<br>");
for (key in splits) document.write(splits[key],"<br>");
</script>

参照

s1、s2、s3... の状況を除いて、パターンを一致させる (または置き換える) 方法

于 2014-06-03T02:08:01.810 に答える