2016-05-18 10 views
0

PHPとJqueryを使用しているアプリケーションで、キーワード「Br」テキスト「Back bone polished」を使用してテキストを保存できるアプリケーションに取り組んでいます。この特定のセクションについては、ユーザは、テキスト領域のプレス入力にキーワードを入力することができ、テキストは第2のテキスト領域に現れる。テキスト領域内に他のテキストが既に存在する可能性があるため、テキスト領域内のキーワードを囲むために "$"を使用しています。たとえば、次のようにいくつかのテキスト$キーワードは、いくつかのより多くのテキストが$キーワード2 $などを継続$ ...私は、次のような正規表現を思い付くために管理している:Javascript Reg Expが正しく一致しない

レッグ経験:とき

match(/[$](.*)[a-zA-Z0-9](.*)[$]/g) 

は今、これは正常に動作します次のようにテキスト領域内のテキストが構成されています

私はこのような何かに構造を変更した場合、一部のテキスト$キーワード$は、いくつかのより多くのテキストは、しかし$キーワード2 $

を続けます

$$一部のテキスト$キーワード$もう少し続けます$ Keyword2 $もう少し続けます$ Keyword3、Keyword4 $

これはキーワードだけではなく、行全体を引き出します。私がしたいのは、2つの$$の間にテキストがない場合でも、 "$"の間のテキストを引っ張るだけです。そう、たとえばマッチ正規表現は中に引く必要があります:

  • $
  • キーワードの間で、何もないので

    1. (空白)キーワード2
    2. KEYWORD3、Keyword4

    Iあなたは優しくしてください。

  • +1

    クイック推測:(。*?) 'のような怠惰0個以上の選択を使用'も最初ありません例(「これはうまくいく」)は本当に機能しますか?最初の '$ 'から文字列の最後まで完全に一致しています。 '。*'と '。* 'の両方を変更すると。*? 'とすると、' ["Keyword $"、 "$ Keyword2 $"] 'という2つのマッチが得られます。 – apsillers

    +0

    私はそれを試みましたが、変化はありませんでした。ご協力いただきありがとうございます。 – CoderPoet

    +1

    あなたのregex as postedは "リテラル' $ 'に続いて0個以上の任意の文字が続き、1文字または数字の後に0個以上の任意の文字が続き、その後に文字' $ '"が続くことを意味します。だから、 '$ ;; *** ,,,,,, FOO( - = + **((()$'は一致するでしょう) – Pointy

    答えて

    1

    周囲の「$」記号とキーワード識別子の間に任意の文字を使用することはできません。正規表現を

    match(/\$[a-zA-Z0-9,\s]*\$/g) 
    

    に変更し、キーワードを認識する必要があります。

    私はこの正規表現使用するhttps://jsfiddle.net/317dgwq5/1/

    +0

    私がRegExpをあなたが提案したものに変更すると、最初の$$グループを引っ張っているはずだから、4つではなく2つのマッチしか得られません最後のKeyword3、Keyword4。ありがとうございました。 – CoderPoet

    +0

    キーワードに空白を入れるために '\ s'を追加しました。実際の例については、https://jsfiddle.net/317dgwq5/1/を参照してください –

    +0

    ありがとうございました! – CoderPoet

    0

    のtry/\ $ [-Z0-9] + \ $/GIM

    document.body.innerHTML = JSON.stringify("sadasdjak $aadas$ $$$$ $bbbb$$ccccc$".match(/\$[a-z0-9]+\$/gim))

    1

    を参照してください:/\$(\w+)\$/gを、そして利用します.replace()に提供できるコールバック関数のうち、キーワードに一致するようにキーワードルックアップを行うことができます。

    ここはデモです。ただ、入力し、置換テキストは、直ちにoninputイベントハンドラを介して表示されます。

    var keywords = { 
     
        Keyword: 'about nothing', 
     
        Keyword2: 'reading', 
     
        Keyword3: 'Hello', 
     
        Keyword4: 'Bye', 
     
    }; 
     
    
     
    // I/O 
     
    
     
    var inp = document.getElementById('inp'); 
     
    var out = document.getElementById('out'); 
     
    
     
    inp.oninput = function() { 
     
        out.value = inp.value.replace(/\$(\w+)\$/g, function(match, key) { 
     
         return keywords[key] || ''; 
     
        }); 
     
    } 
     
    inp.oninput();
    <small>$Keyword$ = about nothing; $Keyword2$ = reading; 
     
    $Keyword3$ = Hello; $Keyword4$ = Bye<br></small> 
     
    
     
    <textarea id="inp" rows=4 cols=50>$$Some text $Keyword$ some more text continue $Keyword2$ some more text continue $Keyword3,Keyword4 $</textarea> 
     
    
     
    <textarea id="out" rows=4 cols=50></textarea>

    関連する問題