以下のこの2つの記号を文字列からコードに置き換える方法を知っている人はいますか?
- ' 左一重引用符を ' に
- ' 右シングル クォーテーション ' に
- " に二重引用符を残して "
- " 右二重引用符に "
以下のこの2つの記号を文字列からコードに置き換える方法を知っている人はいますか?
難しいのは、単一引用符の数を台無しにするアポストロフィを識別することです。
二重引用符については、それらをすべて見つけて、奇数のものを左のカーリーに、偶数のものを右のカーリーに置き換えるのが安全だと思います。引用符がネストされている場合を除きます。
ソースは何ですか?英文?コード?
引用符をどちら (左または右) に移動するかを知ることは、誰にでもできるようにしたい場合は簡単ではありません。常に正確にすることがそれほど重要でない場合は、いくつかの正規表現を使用できます。
function curlyQuotes(inp) {
return inp.replace(/(\b)'/, "$1’")
.replace(/'(\b)/, "‘$1")
.replace(/(\b)"/, "$1”")
.replace(/"(\b)/, "“$1")
}
curlyQuotes("'He said that he was \"busy\"', said O'reilly")
// ‘He said that he was “busy”', said O’reilly
2 番目の ' が適切に変更されていないことがわかります。
私は最近、まさにそれを行うjsPrettifyと呼ばれるタイポグラフィ整形エンジンを作成しました。これは、私が使用するアルゴリズムの引用のみのバージョンです(オリジナルはこちら):
prettifyStr = function(text) {
var e = {
lsquo: '\u2018',
rsquo: '\u2019',
ldquo: '\u201c',
rdquo: '\u201d',
};
var subs = [
{pattern: "(^|[\\s\"])'", replace: '$1' + e.lsquo},
{pattern: '(^|[\\s-])"', replace: '$1' + e.ldquo},
{pattern: "'($|[\\s\"])?", replace: e.rsquo + '$1'},
{pattern: '"($|[\\s.,;:?!])', replace: e.rdquo + '$1'}
];
for (var i = 0; i < subs.length; i++) {
var sub = subs[i];
var pattern = new RegExp(sub.pattern, 'g');
text = text.replace(pattern, sub.replace);
};
return text;
};