1

アスタリスク文字を一致させようとしています*が、それが 1 回出現した場合のみです。

私が試してみました:

/\*(?!\*)/g

次の文字がアスタリスクでないかどうかを事前にチェックします。これで問題は解決しますが、前の文字もアスタリスクではないことを確認する必要があります。残念ながら、javascript は否定的な後読みをサポートしていません。

明確にするために:

This is an ex*am*ple

各アスタリスクに一致する必要がありますが、次のとおりです。

This is an ex**am**ple

一致をまったく返すべきではありません。

前もって感謝します

4

1 に答える 1

3
var r = /(^|[^*])(\*)([^*]|$)/;

r.test('This is an ex*am*ple');    // true
r.test('This is an ex**am**ple');  // false
r.test('*This is an example');     // true
r.test('This is an example*');     // true
r.test('*');                       // true
r.test('**');                      // false

いずれの場合も、一致したアスタリスクはキャプチャ グループ 2 にあります。

完全な解決策として、正規表現を使用しない:

function findAllSingleChar(str, chr) {
   var matches = [], ii;

   for (ii = 0; ii < str.length; ii++) {
     if (str[ii-1] !== chr && str[ii] === chr && str[ii+1] !== chr) {
       matches.push(ii);
     }
   }

   return matches.length ? matches : false;
}

findAllSingleChar('This is an ex*am*ple', '*');   // [13, 16]
findAllSingleChar('This is an ex**am**ple', '*'); // false
findAllSingleChar('*This is an example', '*');    // [0]
findAllSingleChar('This is an example*', '*');    // [18]
findAllSingleChar('*', '*');                      // [0]
findAllSingleChar('**', '*');                     // false
于 2013-08-21T09:20:37.813 に答える