9

ユーザーが次のような文字列を入力するテキストボックスがあります。

"hello world! I think that __i__ am awesome (yes I am!)"

次のような正しいURLを作成する必要があります。

hello-world-i-think-that-i-am-awesome-yes-i-am

正規表現を使用してどのように行うことができますか?

また、ギリシャ語でそれを行うことは可能ですか(たとえば)?

"Γεια σου κόσμε"

に変わります

geia-sou-kosme

他のプログラミング言語(Python / Ruby)では、翻訳配列を使用しています。ここでも同じことをする必要がありますか?

4

4 に答える 4

14

これを試して:

function doDashes(str) {
    var re = /[^a-z0-9]+/gi; // global and case insensitive matching of non-char/non-numeric
    var re2 = /^-*|-*$/g;     // get rid of any leading/trailing dashes
    str = str.replace(re, '-');  // perform the 1st regexp
    return str.replace(re2, '').toLowerCase(); // ..aaand the second + return lowercased result
}
console.log(doDashes("hello world! I think that __i__ am awesome (yes I am!)"));
// => hello-world-I-think-that-i-am-awesome-yes-I-am

ギリシャ文字に関しては、ええ、別の正規表現で使用されるある種のルックアップテーブル以外は考えられません。

編集、これがワンライナーのバージョンです:
編集、LowerCase()に追加:
編集、末尾の正規表現の困惑した修正:

function doDashes2(str) {
    return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase();
}
于 2010-03-25T22:31:46.697 に答える
1

このジョブを実行するための単純な正規表現は、すべての「単語以外の」文字を照合し、それらを。に置き換えること-です。ただし、この正規表現を照合する前に、文字列を小文字に変換してください。最後にダッシュが可能かもしれないので、これだけでは絶対確実ではありません。

[^a-z]+

したがって、交換後; この正規表現を使用して、ダッシュを(前面と背面から)トリミングできます。

^-+|-+$

ギリシャ語からラテン語への翻訳を自分で作成する必要があります。正規表現はそこでは役に立ちません。変換配列を使用することをお勧めします。

于 2010-03-25T22:26:38.513 に答える
1

ギリシャ文字については実際には言えませんが、最初の例では、次のように簡単に説明します。

/[^a-zA-Z]+/

それをパターンとして使用し、一致を「-」に置き換えると、トリックが実行されます

ギリシャ文字のように、すべての「文字変換」を含む配列を使用してから、その値を正規表現に追加することをお勧めします。

于 2010-03-25T22:27:45.173 に答える
1

URLを大まかに作成するには、次のようなものが必要になります。

var textbox = "hello world! I think that __i__ am awesome (yes I am!)";
var url = textbox.toLowerCase().replace(/([^a-z])/, '').replace(/\s+/, " ").replace(/\s/, '-');

英字以外のすべての文字を削除し、ダブルスペースを削除してから、すべてのスペース文字をダッシュ​​に置き換えます。

別の正規表現を使用して、ギリシャ文字を英語文字に置き換えることができます。

于 2010-03-25T22:27:46.607 に答える