2017-03-27 8 views
1

マークダウンで書かれたブログ投稿の最初の20語を読む必要があるので、それらを概要ページのプレビューテキストとして表示することができます。値下げは、次のようになります。正規表現の最初の20語のマークダウン

# A new horizon 
#### Subtitle 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. 

#### Second title 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 

いくつかのルールがあります。

  • は、句読点、数字などの特殊文字を含む20個の最初の言葉を選択#
  • で始まる見出しを使用しないでください。 ä、ö、ü
  • 投稿に十分でない場合は、20ワード未満を選択してください。
  • 単語選択が不可能な場合は、上記の規則に一致する最初の100文字を選択してください

これを行うには、サーバー上でJavaScriptを使用しています。他の/複合的なアプローチは高く評価されています。 http://regexr.com/3fk2f

+1

1つの正規表現は、おそらくJSエンジンでは非常に貧弱です(たとえば、ここではかなり役に立つかもしれない見た目の欠如など)。独自のアルゴリズムを実装する方が効果的です(例: '# 'で始まる行を削除し、スペースで区切ってください。 – sp00m

+1

[this](https://regex101.com/r/ODk4Uc/1)のようなものはありますか? –

答えて

3

は多分これが仕事を行うことができます:私はあまり機能していないアプローチで

Regexr

^(?!#) *((?:\S+(?: |$)+){1,20}) 

は、完全を期すためと混合アプローチをそれlive

1

を参照してください。より単純な正規表現とJavascript:

var md = post.markdown.replace(/#+.+\n/gm, '').split(' ').slice(0, 20).join(' '); 

/#+.+\n/gmは、#で始まるすべての行と改行が一致するまで、すべての行を削除します。

次に、残りの文字列を空白で分割して、単語の配列(コンマ、特殊文字などが単語に付けられています)を与えます。

この配列をスライスして、20個の最初のエントリを取得し、それらを空白と一緒に戻します。

関連する問題