I have this string for example:
str = \"my name is john#doe oh.yeh\";
the end result I am seeking is this Array:
strArr = [\'my
This works:
array = string.replace(/#|\./g, ' &$&').split(' ');
Take a look at demo here: http://jsfiddle.net/M6fQ7/1/
use split() method. That's what you need: http://www.w3schools.com/jsref/jsref_split.asp
Ok. i saw, you found it, i think:
1) first use split to the whitespaces
2) iterate through your array, split again in array members when you find # or .
3) iterate through your array again and str.replace("#", "&#")
and str.replace(".","&.")
when you find
I would think a combination of split() and replace() is what you are looking for:
str = "my name is john#doe oh.yeh";
strArr = str.replace('\W',' &');
strArr = strArr.split(' ');
That should be close to what you asked for.
You have to use a Regular expression, to match all special characters at once. By "special", I assume that you mean "no letters".
var pattern = /([^ a-z]?)[a-z]+/gi; // Pattern
var str = "my name is john#doe oh.yeh"; // Input string
var strArr = [], match; // output array, temporary var
while ((match = pattern.exec(str)) !== null) { // <-- For each match
strArr.push( (match[1]?'&':'') + match[0]); // <-- Add to array
}
// strArr is now:
// strArr = ['my', 'name', 'is', 'john', '&#doe', 'oh', '&.yeh']
It does not match consecutive special characters. The pattern has to be modified for that. Eg, if you want to include all consecutive characters, use ([^ a-z]+?)
.
Also, it does nothing include a last special character. If you want to include this one as well, use [a-z]*
and remove !== null
.
Assuming the result should be '&doe'
and not '&#doe'
, a simple solution would be to just replace all .
and #
with &
split by spaces:
strArr = str.replace(/[.#]/g, ' &').split(/\s+/)
/\s+/
matches consecutive white spaces instead of just one.
If the result should be '&#doe'
and '&.yeah'
use the same regex and add a capture:
strArr = str.replace(/([.#])/g, ' &$1').split(/\s+/)