繁体   English   中英

如何使用 JavaScript 从自定义字符中提取字符串?

[英]How to extract string from custom characters using JavaScript?

如果我在页面上创建的 2 个方括号之间有一个字符串,我 go 如何将该值存储在变量中并删除方括号?

例子

[String I want]

所以我只剩下

var mystring = "String I want"

更新:看来我无法回复你们任何人。 所以一定是在胡闹。 无论如何,这就是我正在使用的

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

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

  alert(rating);

好像不行?

这是一个也将处理任何前导或尾随空格(以及嵌套括号)的版本:

// 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"
"[String I want]".replace(/^\s*\[|\]\s*$/g, '');

那应该给你你正在寻找的东西。 您还可以使用 trim function 从字符串中删除第一个和最后一个字符,类似于 PHP 的 trim,您可以在其中提供可选的定界符。

更新:前导和尾随空格容错

我更喜欢 Andrew Noyes 的回答。 我不能投票并明确表示这比其他的要好,所以这是另一种获得你想要的字符串的可能性。

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

只有一种可靠的方法可以做到这一点:遍历 DOM 并在每个文本节点中搜索匹配项。

这个 function 就是这样做的:

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是不可靠的,因为它可能包含其他元素,并且这些元素可能具有与您要查找的内容相匹配的属性 - 您不想错误地删除它们......

结合评论和其他答案......

var rating = $('.comment-body p').html().replace(/^\[\]$/g, '');
alert(rating);

使用字符串 object slice() 方法删除第一个和最后一个字符:

str = str.slice(1,-1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM