3

私は現在、二重引用符をスマート クォートに置き換えるための正規表現 (Javascript) を使用しています。

// ie: "quotation" to “quotation”

二重引用符を置き換えるために使用した式は次のとおりです。

str = str.replace(/"([A-Za-z ]*)"/ig, "“$1”")

引用符内の句に追加の句読点が含まれていない場合、上記は完全に機能しますが、アポストロフィも置き換える必要があります。

// ie: replace "It's raining again" with “It’s raining again!”

カプセル化されていない場合、単一引用符/アポストロフィを置き換える式は正常に機能します。

str.replace(/\'\b/g, "’"); // returns it's as it’s correctly

// Using both:
str.replace(/"([A-Za-z ]*)"/ig, "“$1”").replace(/\'\b/g, "’");

// "It's raining again!" returns as "It’s raining again!"
// Ignores double quotes

これは、二重引用符を置き換える式が文字のみに一致するためであることはわかっていますが、正規表現の経験が限られているため、単一引用符を含む可能性のある引用符の一致を作成する方法に戸惑いました!

どんな助けでも大歓迎です!前もって感謝します。

4

4 に答える 4

1

引用符以外のすべてを引用符に含めることができます。

str = str.replace(/"([^"]*)"/ig, "“$1”")

別のオプション: 非貪欲な検索を使用します。

str = str.replace(/"(.*?)"/ig, "“$1”")

また、単語の末尾にある単一引用符のみを変更する必要があるかどうかもわかりません。全部変えたほうがいいのかな?

replace(/\'/g, "’");
于 2012-07-23T16:30:56.420 に答える
1

以外のものを検索できます"?あなたがあなたのようなものを持っていた場合、私はまた怠惰なマッチをし"Hey," she said, "what's up?"ますstr:

str.replace(/"([^"]*?)"/ig, "“$1”").replace(/\'\b/g, "’");
于 2012-07-23T16:31:22.163 に答える
1

特に html ファイルでこれが発生する場合は、引用符の左右の特定の文字を制限することをお勧めします。私はこれを使用しています。

str = str.replace(/([\n >*_-])"([A-Za-z0-9 ÆØÅæøå.,:;!#@]*)"([ -.,!<\n])/ig, "$1«$2»$3");

このようにして、href="http..... のような html タグ内の引用符を置き換えることを避けます。

通常、開始引用符の左側にスペースがあり、終了引用符の右側にもう 1 つスペースがあります。HTML 文書では、閉じ括弧、改行などである可能性があります。ノルウェー文字も含めました。:-)

于 2014-12-08T16:57:43.370 に答える
1

現在の回答に追加する[A-Za-z ]*ために、二重引用符の置換に対して一致を実行しています。これは、「大文字、小文字、またはスペースに一致する」ことを意味します。It's raining一致式に一重引用符が含まれていないため、これは一致しません。

She said "It's raining outside." He said "really?"元の正規表現では次のような文字列が返されるため、「別の二重引用符以外のもの」と一致させるというアドバイスに従いますShe said &rdquo;It's raining outside." He said "really?&rdquo;(貪欲な一致は「内側の」二重引用符をスキップします)。

于 2012-07-23T16:54:55.493 に答える