Ich möchte die Anzahl der Wörter in einer Passage zählen, die sowohl Englisch als auch Chinesisch enthält. Für Englisch ist es einfach. Jedes Wort ist ein Wort. Für Chinesen zählen wir jedes Zeichen als Wort. Daher ist 香港人 hier drei Wörter.

So sollte beispielsweise "Ich bin ein 香港人" eine Wortzahl von 6 haben.

Irgendeine Idee, wie ich es in Javascript / jQuery zählen kann?

Vielen Dank!

9
user2335065 5 Dez. 2013 im 13:42

3 Antworten

Beste Antwort

Versuchen Sie eine Regex wie folgt:

/[\u00ff-\uffff]|\S+/g

Zum Beispiel gibt "I am a 香港人".match(/[\u00ff-\uffff]|\S+/g):

["I", "am", "a", "香", "港", "人"]

Dann können Sie einfach die Länge des resultierenden Arrays überprüfen.

Der \u00ff-\uffff Teil des regulären Ausdrucks ist ein Unicode-Zeichenbereich. Sie möchten dies wahrscheinlich auf die Zeichen eingrenzen, die Sie als Wörter zählen möchten. Zum Beispiel wäre CJK Unified \u4e00-\u9fcc.

function countWords(str) {
    var matches = str.match(/[\u00ff-\uffff]|\S+/g);
    return matches ? matches.length : 0;
}
6
Dagg Nabbit 5 Dez. 2013 im 12:01

Ich habe das Skript ausprobiert, aber manchmal wird die Anzahl der Wörter falsch gezählt. Zum Beispiel geben einige Leute "香港人 Computing 都 不錯 的" ein, aber das Skript zählt es als 4 Wörter (unter Verwendung des folgenden Skripts).

<script>
var str = "香港人computing都不錯的";

  var matches = str.match(/[\u00ff-\uffff]|\S+/g);
    x= matches ? matches.length : 0;
    alert(x)
</script>

Um das Problem zu beheben, habe ich die Codes geändert in:

<script>
var str="香港人computing都不錯的";

/// fix problem in special characters such as middle-dot, etc.   
str= str.replace(/[\u007F-\u00FE]/g,' ');

/// make a duplicate first...
var str1=str;
var str2=str;

/// the following remove all chinese characters and then count the number of english characters in the string
str1=str1.replace(/[^!-~\d\s]+/gi,' ')

/// the following remove all english characters and then count the number of chinese characters in the string
str2=str2.replace(/[!-~\d\s]+/gi,'')


var matches1 = str1.match(/[\u00ff-\uffff]|\S+/g);
var matches2 = str2.match(/[\u00ff-\uffff]|\S+/g);


count1= matches1 ? matches1.length : 0;
count2= matches2 ? matches2.length : 0;

/// return the total of the mixture
var lvar1= (count1+count2);

alert(lvar1);
</script>

Jetzt zählt das Skript die Anzahl der Wörter in einer Mischung aus Chinesisch und Englisch richtig .... Viel Spaß ..

1
Ken Lee 2 Okt. 2019 im 21:02

Es kann nicht 6 sein, da bei der Berechnung der Länge eines Strings auch Leerzeichen enthalten sind. So,

var d = "I am a 香港人";
d.length //returns 10
d.replace(/\s+/g, "").length  //returns 7, excluding spaces

Zu Ihrer Information: Ihre Website sollte ordnungsgemäß codiert sein.

Ich glaube, ich habe gefunden, was du brauchst. "Ich bin ein 香港人" enthält a, das zweimal wiederholt wird. So Mit Hilfe der Antwort von @PSL habe ich einen Weg gefunden.

var d = "I am a 香港人";
var uniqueList=d.replace(/\s+/g, '').split('').filter(function(item,i,allItems){
    return i==allItems.indexOf(item);
}).join('');
console.log(uniqueList.length);  //returns 6

JSFiddle

Während Sie kommentieren, gehe ich davon aus, dass Sie als "Ich bin ein 香 港 人" zwischen jedem Wort stehen. Jetzt habe ich den Code geändert

var d = "I am a 香 港 人";

var uniqueList=d.split(' ').filter(function(item,i,allItems){
    return i==allItems.indexOf(item);
});
console.log(uniqueList.length);  //returns 6

JSFiddle

1
Community 23 Mai 2017 im 11:54