Как извлечь строку из пользовательских символов с помощью JavaScript? - PullRequest
0 голосов
/ 16 июня 2009

Если у меня есть строка между 2 квадратными скобками, которую я создал на странице, как бы мне было сохранить это значение в переменной и удалить квадратные скобки?

* ** 1003 тысяча два * Пример
[String I want]

Так что я остался с

var mystring = "String I want"

ОБНОВЛЕНИЕ: Кажется, я не могу ответить никому из вас. ТАК, должно быть, действует. Тем не мение это то, что я использую

var wholeParagraph = $('.comment-body p');

  var rating = wholeParagraph.substring(wholeParagraph.indexOf('['), 1+wholeParagraph.lastIndexOf(']'));

  alert(rating);

Кажется, не работает?

Ответы [ 6 ]

3 голосов
/ 16 июня 2009

Вот версия, которая также будет обрабатывать любые начальные или конечные пробелы (а также вложенные скобки):

// This works
var str = "[String I want]";
var mystring = str.substring(str.indexOf('['), 1+str.lastIndexOf(']'));

// But it'll also work with these strings:
var str = "    [String I want]    ";     // returns "String I want"
var str = " [string I [really] want]  "; // returns "String I [really] want"
1 голос
/ 16 июня 2009
"[String I want]".replace(/^\s*\[|\]\s*$/g, '');

Это должно дать вам то, что вы ищете. Вы также можете использовать функцию обрезки для удаления первых и последних символов строки, аналогично обрезке в PHP, где вы можете задать дополнительный разделитель.

ОБНОВЛЕНО: Допустимые начальные и конечные пробельные символы

0 голосов
/ 16 июня 2009

Объединение комментариев и других ответов ...

var rating = $('.comment-body p').html().replace(/^\[\]$/g, '');
alert(rating);
0 голосов
/ 16 июня 2009

Есть только один надежный способ сделать это: пройти через DOM и найти совпадение в каждом текстовом узле.

Эта функция сделает именно это:

function findTextNodeWithMatch(regex, context) {

    context = context || document.documentElement;

    var childNodes = context.childNodes,
        retTextNodes = [],
        i = -1, node;

    while ( node = childNodes[++i] ) {
        if (node.nodeType === 3) {
            var m;
            while (m = regex.exec(node.data)) {
                retTextNodes.push({
                    node: node,
                    match: m
                });
            }
        }
        if (node.nodeType === 1 && node.nodeName.toLowerCase() !== 'script') {
            retTextNodes = retTextNodes.concat( arguments.callee( regex, node ) );
        }
    }

    return retTextNodes;

}

Использование:

var patternToMatch = /\[((?:\\\[|.)*)\]/g;
var matchingNodes = findTextNodeWithMatch( patternToMatch, $('.comment-body p')[0] );

for (var i = 0, len = matchingNodes.length; i < len; i++) {
    // Loop through the matching nodes:

    // Extract the string you want:
    var theMatch = matchingNodes[i].match;
    var myString = theMatch[1];
    alert( myString );

    // Replace the string within the node:
    var theNode = matchingNodes[i].node;
    theNode.parentNode.replaceChild( document.createTextNode(theNode.data.replace(patternToMatch, '')), theNode );

}

Использование элемента innerHTML не надежно, так как он может содержать другие элементы, и эти элементы могут иметь атрибуты, которые соответствуют тому, что вы ищете - вы не хотите удалять их по ошибке. ..

0 голосов
/ 16 июня 2009

Я бы предпочел ответ Эндрю Нойеса. Я не могу выразить мнение и дать понять, что это лучше, чем другие, так что вот еще одна возможность получить желаемую строку ..

str = str.substr (1, str.length -2);

0 голосов
/ 16 июня 2009

Используйте метод строкового объекта slice () для удаления первого и последнего символов:

str = str.slice(1,-1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...