2016-07-04 4 views
-1

私はこれを永遠にやろうとしています。私はすべての単語の最初の文字を一致させることができますが、中括弧内の単語を除外することはできません。例えばどのようにして、中括弧内の単語を除くすべての単語の最初の文字をRegexと一致させることができます

私は(やる)これ、ください(ヘルプ)私にはできません。

だから、これが一致する必要があります - Ictpm - のみ。

\b\wを使用すると、単語の最初の文字と一致するだけで、中カッコ内の単語は除外されません。私も否定的な先読みを試みましたが、正しくできないようです。

(?!\(()\))\b\w 

また、私はユニコードに問題があります。 (?:^|)[a-z]{1}または\b\wを使用すると、唯一のラテン文字と一致し、私は時々、たとえば、異なるユニコードを持っています:

私は(誰か)ვიღაცています。

そして、このような状況の正規表現で

Ias、ない 一致します。言葉のおかげで

+4

試してみてください: "私はこれを行うことはできません。 e(ヘルプ)me ".match(/(?:^ | )[a-z] {1}/gi) 'である。しかし、テストされていません。 – ftor

+1

ご注意:あなたがこれまでに試したことを示す投票を避けるために – ftor

+0

ありがとう!それは動作しますが、文字の前のスペースにもマッチします。 "I"、 "c"、 "t"、 "p" ... – Messing

答えて

1

この1つのキャッチのみ最初の文字:?

(< = [^(])\ B \ワット

これは正の後読みである:(https://regex101.com/から)

は、表現の現在の位置で終了する、与えられたパターンが一致することを保証します。任意の文字を消費しません。

/(? < = FOO)バー/

foobarにマッチ foobazは、私はあなた

+0

答えがありがとう、正式なlookbehindはjavascriptでサポートされていません。私はOPのjsについて言及するのを忘れましたが、この質問はjavascriptでタグ付けされています。 – Messing

2

異なるものが考慮されるように助けることができない非ラテンcaractersについて

と一致していません。

  1. まず、非ラテン文字でもある文字を定義する必要があります。 See this answer and comments。だから、手紙に合うようにしましょう[\u00C0-\u1FFF\u2C00-\uD7FF\w]

  2. これをJavascriptで行いたいので、正規表現は限られています。単語境界\bは、指定された文字の範囲と一致しないため、使用できません。 Lookbehindは利用できません。指定された文字のnegated classを使用する必要があります。 「ワード境界」として(?:^|[^'\u00C0-\u1FFF\u2C00-\uD7FF\w-])のようなものです。(?![^(]*\))

すべて一緒にパターンが

(?:^|[^'\u00C0-\u1FFF\u2C00-\uD7FF\w])([\u00C0-\u1FFF\u2C00-\uD7FF\w])(?![^(]*\)) 

次のようになります。ここで私はまた、括弧の外にあることを確認するためにlookaheadを使用can't

  • などで試合を避けるために'を追加しましたSee this fiddledemo at regex101

  • +0

    素晴らしい 'RegExp'スタント!しかし、非常に信頼性の高い。おそらくあまりにも多くの例外があります: '' code-breaking text ".match(/(?:^ | [^ 'az \ w])([az \ w])(?![^(] * \))/ gi) ' – ftor

    +0

    @ LUH3417コメントしてくれてありがとう(:'〜 'のために意味する?[それは必要に応じて変更できる](https://regex101.com/r/eJ5nE8/2)。 –