5

デーバナーガリー語を含む HTML コード

<html>
<head>
<title>TODO</title>
<meta charset="UTF-8">
</head>
<body>
    मंत्री मुख्यमंत्री 
</body>
    <script src="jquery-1.11.0.min.js"></script>
    <script src="xregexp_20.js"></script>
    <script src="addons/unicode/unicode-base.js"></script>
    <script src="addons/unicode/unicode-scripts.js"></script>
    <script src="my.js"></script>
</html>

私のJavaScriptコード

var html = document.getElementsByTagName("html")[0];
var fullpage_content = html.innerHTML;

var regex = RegExp("मंत्री", "g");
var count = fullpage_content.match(regex);
console.log("count in page : " + count+ ", " + count.length);

//use of word boundry ,not supported by devanagari characters
regex = RegExp("\\bमंत्री\\b", "g");
count = fullpage_content.match(regex);
console.log("count in page : " + count);

regex = XRegExp("मंत्री");
var match = XRegExp.matchChain(fullpage_content, [regex]);
console.log("count in page : " + match + ", " + match.length);

//xregex do not support word boundry \\b
regex = XRegExp("\\bमंत्री\\b");
match = XRegExp.matchChain(fullpage_content, [regex]);
console.log("count in page : " + match + ", " + match.length);

js の出力 (Chrome 上)

ページ数 : 2, 2

ページ内のカウント: null

ページ数 : 2, 2

ページ内のカウント: , 0

全語検索は答えとして1つを与えるはずですが、regexpとXRegExpの両方が失敗しています。助けが必要です。

4

4 に答える 4

3

この正規表現を使用すると、 .

var regex = XRegExp("(?:^|\\P{L})मंत्री(?=\\P{L}|$)");

これが行うことは、次の場合に一致します。

  1. 文字列の先頭にあるか、Unicode が非文字と見なす文字が前にある。

  2. 文字列の末尾にあるか、Unicode が非文字と見なす文字が続きます。

これは数字と一致しない\bため、これとは少し異なることに注意してください。\bたとえば、 、 、およびは単語の一部と見なされ、単語の境界をマークしないため、/\bmantri\b/一致しません。エミュレートするものが必要な場合は、次のようにします。mantri123123\b

var regex = XRegExp("(?:^|[^\\p{L}\\p{N}])मंत्री(?=[^\\p{L}\\p{N}]|$)");

最初の正規表現との違いは、この正規表現では、数字の前後に数字を入れることができないことです。

正規表現の最後に否定先読みを使用したので、単語に続く文字は結果から除外されます。同等の否定後読みがないため、文字の前に文字がある場合、結果表示されます。特定のアプリケーションでこのキャラクターをどうしたいかを決める必要があります。

于 2014-04-23T11:07:00.103 に答える
1
regex = XRegExp("(?:^|[^\\p{Devanagari}\\p{L}])मंत्री(?=[^\\p{Devanagari}\\p{L}]|$)");

それを解決しました。特にルイスに感謝します。最終決定する前に、より厳密なテスト ケースをテストしました。

英国 英国 英国 英国 。मंतमंत役において - <<ダウンー<मंतमंतमंतな>मंतमंतo>

英国、英国

英国、英国、英国、英国

于 2014-04-25T07:38:20.100 に答える
0

各単語の後に文字区切りとして 1 つ以上のスペースが続くと仮定すると、次の js 正規表現で正しい結果が得られます。

console.log("count inline without xRegExp:" + "मंत्री मुख्यमंत्री".match(/मंत्री\s+/g));
于 2014-04-23T08:45:48.660 に答える