redviper2100
redviper2100

Reputation: 265

Extract values from a string to an array in Javascript

I have this string and I want to extract the TEXT1, TEXT2, etc... to an array m.

I tried with regex, but it doesn't work.

var regex = /item\b[^>]*>(.*?)<button/g; 

var string = '<li id="reminder-1440746981190" class="new-item">TEXT1
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>
<li id="reminder-1440746983703" class="new-item">TEXT2
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>';

var m;

while ((m = regex.exec(string)) !== null) {
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
}

alert(m[0]);

Any ideas?

Upvotes: 2

Views: 112

Answers (2)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626738

Here is a piece of code based on @Rahul's answer that returns an array of trimmed text nodes:

var arr = [];
$('li').contents().filter(function(){
      if (this.nodeValue !== null && 
           this.nodeValue.trim().length > 0) {
        arr.push(this.nodeValue.trim());
     }
});
console.log(arr.filter(Boolean));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li id="reminder-1440746981190" class="new-item">TEXT1
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>
<li id="reminder-1440746983703" class="new-item">TEXT2
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>

Result: ["TEXT1", "TEXT2"]

Upvotes: 1

Rahul Tripathi
Rahul Tripathi

Reputation: 172398

You can try like this:

var str = $('li').contents().filter(function(){
    return this.nodeType === 3;
}).text();

console.log(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li id="reminder-1440746981190" class="new-item">TEXT1
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>
<li id="reminder-1440746983703" class="new-item">TEXT2
    <button class="icon-trash delete-button" contenteditable="false"></button>
    <button class="icon-pencil edit-button" contenteditable="false"></button>
</li>

Upvotes: 3

Related Questions