3

引用符で囲まれている場合を除き、すべて:)をに置き換えたい:D"

例 1:

Hey man :D, how're you? :) My friend told me "this can't be true :)"

になる

Hey man :D, how're you? :D My friend told me "this can't be true :)"

ご覧のとおり、:)で囲まれている場合は置き換えられません"。この条件がなければ、とても簡単ですよね?このすべてに Javascript (jQuery) を使用しています。

これが正規表現で明らかに不可能な場合、代替の提案は何でしょうか?

4

3 に答える 3

6

二重引用符が不均衡でないと仮定すると、これはあなたのために働くはずの正規表現です:

:\)(?=(?:(?:[^"]*"){2})*[^"]*$)

説明:some text until a double quote is foundこの正規表現は、基本的に のペアの 0 回以上の出現に一致する正の先読みを使用してい([^"]*"){2}ます:)

簡単に言えば、二重引用符内のすべての一致はRHS:)で奇数の一致があるため、二重引用符の外にある場合にのみa を置き換えることを意味します。[^"]*"

ライブデモ: 1. http://www.rubular.com/r/3aixZy5bYR

ライブデモ: 2. http://ideone.com/C679NW

于 2013-04-01T10:19:09.657 に答える
0
function parseSmiley(str){
    return str.replace(/(?!"):\)(?!")/g, ":D");
}

console.log(parseSmiley('Hey man :D, how\'re you? :) My friend told me "this can\'t be true :)"');

そして、テストできるように入力をいじります

基本的に、囲まれて:)いないすべてのインスタンス" ":D

于 2013-04-01T10:16:24.137 に答える