1

次のような文字列があります。

foo title:2012-01-01 bar

「タイトル:2012-01-01」を取得し、日付部分「2012-01-01」を特別な形式に置き換える必要がある場所。私は正規表現が苦手で、現在持っています:

'foo from:2012-01-01 bar'.replace(/from:([a-z0-9-]+)/i, function() {
    console.log(arguments);
    return 'replaced';
})

そしてそれは戻ります

foo replaced bar 

これは始まりですが、正確ではありません。「from:」を置き換えるのではなく、「2012-01-01」だけを置き換える必要があります。(?:from:) を使用してみましたが、「from:」を置き換えることはできませんでした。また、「from:」と「2012-01-01」の間にスペースがある可能性があることを考慮する必要があるため、これも一致させる必要があります。

foo title: 2012-01-01 bar
4

2 に答える 2

3

以下は、必要なことを行う必要があります。自分でテストしました:

'foo from:2012-01-01 bar'.replace(/(\w+:\s?)([a-z0-9-]+)/i, function(match, $1) {
    console.log(arguments);
    return $1 + 'replaced';
});

デモ

title: etcと の両方に一致しfrom:etcます。は$1最初に一致した(\w+:\s?)グループ\wです\s?

于 2012-07-31T20:57:56.563 に答える
0

フォーマットが常に である場合from:...、「from」テキストをキャプチャする必要はまったくありません。

'foo from:2012-01-01 bar'.replace(/from:\s*([a-z0-9-]+)/i, function() {
    console.log(arguments);
    return 'from: replaced';
});

ただし、間隔を維持したい場合は、次のことができます。

'foo from:2012-01-01 bar'.replace(/from:(\s*)([a-z0-9-]+)/i, function(match, $1) {
    console.log(arguments);
    return 'from:' + $1 + 'replaced';
});
于 2012-07-31T21:36:55.327 に答える