gruss ChrisB, hallo Paul,
Ich hab den String jetzt mit dem Regulären Ausdruck gesplittet,
aber leider wird das Trennzeichen dann ja aus dem Text entfernt.
Hab ich eine Möglichkeit, dies zu ändern?Wenn du die Möglichkeit hast, auf den IE zu verzichten, dann ja -
es geht bei split ganz genau so, wie das Capturing bei regulären
Ausdrücken immer geht. ...
@ChrisB - ich bin bis heut' im traum nicht auf den gedanken gekommen,
funktionierendes capture verhalten von RegX-en bei [split] auch nur
zu unterstellen - nie versucht - gleich ausprobiert - *funzt* in
firefox und chrome - aber ...
... Nur der IE ist immer noch zu blöd dazu.
Für den muss man sich dann Workarounds basteln (bzw. ergooglen),
die das ganze etwas umständlicher lösen, ...
wollt' ich auch gleich mal selber haben - hier mein erster wurf
einer generischen loesung (bei Fragen fragen) mit angeschlossenem
*quick and dirty* test:
(function (str) {
if (str.split(/([.])/).join("") !== str) {
String.prototype.split = (function (regX) {
var isNotUndefined = (function (obj/*:[object|value]*/) {
return (typeof obj != "undefined");
}),
isRegExp = (function () {
var exposeImplementation = Object.prototype.toString, regXBaseClass = (/^\[object\s+RegExp\]$/);
return (function (obj/*:[object|value]*/) {
return regXBaseClass.test(exposeImplementation.call(obj));
});
})(),
nativeSplit = String.prototype.split,
makeArrayByFixedSplit = (function (str, regX) {
var arr = [], regXResult = (regX.test(str) && regX.exec(str));
if (isNotUndefined(regXResult[1])) {
do {
arr.push(str.substring(0, regXResult.index));
arr.push(regXResult[1]);
str = str.substring(regXResult.index + regXResult[1].length);
regXResult = (regX.test(str) && regX.exec(str));
} while (isNotUndefined(regXResult[1]));
arr.push(str);
} else {
arr = nativeSplit.call(str, regX);
}
return arr;
});
return (function (splitPattern) {
var arr, str = String(this);
if (isRegExp(splitPattern)) {
arr = makeArrayByFixedSplit(str, splitPattern);
} else {
arr = nativeSplit.call(str, String(splitPattern));
}
return (arr || [str]);
});
})();
}
})("String.prototype.split");
/*
quick test - all code needs to be pasted into [http://jconsole.com/] :
*/
print(String.prototype.split);
print("\n");
print(("String.prototype.split").split(/([.])/));
print(("String.prototype.split").split(/[.]/));
print(("String.prototype.split").split("."));
print("\n");
print(("String.prototype.split").split(/([.])/).join("") === "String.prototype.split"); // true
print(("String.prototype.split").split(/[.]/).join("") === "String.prototype.split"); // false
print(("String.prototype.split").split(".").join("") === "String.prototype.split"); // false
print("\n");
print("\"" + ("Quisque ut blandit risus. Integer vehicula, arcu et placerat "
+"sollicitudin, nunc leo ornare purus, a dapibus dolor lectus "
+"id nisi. Sed ligula sem, gravida interdum sodales ac, rutrum "
+"nec tortor. Nunc sed tristique turpis. Maecenas diam turpis, "
+"pulvinar eget dignissim at, convallis quis erat! Mauris "
+"pretium malesuada tortor, vel aliquet eros sodales ut. "
+"Vivamus id massa et sem luctus pretium. Duis cursus lacinia "
+"feugiat. Sed scelerisque sem vel diam feugiat pharetra. "
+"Donec non tortor sit amet sem placerat suscipit. Integer "
+"consequat urna sed orci suscipit porttitor nec et eros. Sed "
+"ullamcorper dictum lorem nec adipiscing? Aliquam eget mauris "
+"eget ipsum pretium accumsan at vel enim.").split(/([.,!?])/).join("\", \"") + "\"");
print("\n");
/*
quick test results:
*/
print(/*native result as in mozilla firefox*/["Quisque ut blandit risus", ".", " Integer vehicula", ",", " arcu et placerat sollicitudin", ",",
" nunc leo ornare purus", ",", " a dapibus dolor lectus id nisi", ".", " Sed ligula sem", ",", " gravida interdum sodales ac", ",",
" rutrum nec tortor", ".", " Nunc sed tristique turpis", ".", " Maecenas diam turpis", ",", " pulvinar eget dignissim at", ",",
" convallis quis erat", "!", " Mauris pretium malesuada tortor", ",", " vel aliquet eros sodales ut", ".",
" Vivamus id massa et sem luctus pretium", ".", " Duis cursus lacinia feugiat", ".", " Sed scelerisque sem vel diam feugiat pharetra",
".", " Donec non tortor sit amet sem placerat suscipit", ".", " Integer consequat urna sed orci suscipit porttitor nec et eros", ".",
" Sed ullamcorper dictum lorem nec adipiscing", "?", " Aliquam eget mauris eget ipsum pretium accumsan at vel enim",
".", ""].toString() === /*native result as in google chrome*/["Quisque ut blandit risus", ".", " Integer vehicula", ",",
" arcu et placerat sollicitudin", ",", " nunc leo ornare purus", ",", " a dapibus dolor lectus id nisi", ".", " Sed ligula sem", ",",
" gravida interdum sodales ac", ",", " rutrum nec tortor", ".", " Nunc sed tristique turpis", ".", " Maecenas diam turpis", ",",
" pulvinar eget dignissim at", ",", " convallis quis erat", "!", " Mauris pretium malesuada tortor", ",",
" vel aliquet eros sodales ut", ".", " Vivamus id massa et sem luctus pretium", ".", " Duis cursus lacinia feugiat", ".",
" Sed scelerisque sem vel diam feugiat pharetra", ".", " Donec non tortor sit amet sem placerat suscipit", ".",
" Integer consequat urna sed orci suscipit porttitor nec et eros", ".", " Sed ullamcorper dictum lorem nec adipiscing", "?",
" Aliquam eget mauris eget ipsum pretium accumsan at vel enim",
".", ""].toString()); // true
print(/*native result as in mozilla firefox*/["Quisque ut blandit risus", ".", " Integer vehicula", ",", " arcu et placerat sollicitudin", ",",
" nunc leo ornare purus", ",", " a dapibus dolor lectus id nisi", ".", " Sed ligula sem", ",", " gravida interdum sodales ac", ",",
" rutrum nec tortor", ".", " Nunc sed tristique turpis", ".", " Maecenas diam turpis", ",", " pulvinar eget dignissim at", ",",
" convallis quis erat", "!", " Mauris pretium malesuada tortor", ",", " vel aliquet eros sodales ut", ".",
" Vivamus id massa et sem luctus pretium", ".", " Duis cursus lacinia feugiat", ".", " Sed scelerisque sem vel diam feugiat pharetra",
".", " Donec non tortor sit amet sem placerat suscipit", ".", " Integer consequat urna sed orci suscipit porttitor nec et eros", ".",
" Sed ullamcorper dictum lorem nec adipiscing", "?", " Aliquam eget mauris eget ipsum pretium accumsan at vel enim",
".", ""].toString() === /*fixed behaviors result as in msie*/["Quisque ut blandit risus", ".", " Integer vehicula", ",",
" arcu et placerat sollicitudin", ",", " nunc leo ornare purus", ",", " a dapibus dolor lectus id nisi", ".", " Sed ligula sem", ",",
" gravida interdum sodales ac", ",", " rutrum nec tortor", ".", " Nunc sed tristique turpis", ".", " Maecenas diam turpis", ",",
" pulvinar eget dignissim at", ",", " convallis quis erat", "!", " Mauris pretium malesuada tortor", ",",
" vel aliquet eros sodales ut", ".", " Vivamus id massa et sem luctus pretium", ".", " Duis cursus lacinia feugiat", ".",
" Sed scelerisque sem vel diam feugiat pharetra", ".", " Donec non tortor sit amet sem placerat suscipit", ".",
" Integer consequat urna sed orci suscipit porttitor nec et eros", ".", " Sed ullamcorper dictum lorem nec adipiscing", "?",
" Aliquam eget mauris eget ipsum pretium accumsan at vel enim", ".", ""].toString()); // true
so long - peterS. - pseliger@gmx.net
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]